第五章 演算子
int同士の割り切れない割り算
int同士の割り切れない割り算では、
小数部分が切り捨てられてしまいます。
10/4=2?
目次
1.割り算の落とし穴
それでは整数で割り切れない割り算をやってみましょう。
フラグ回収キター!
//Sample11_05.java
class Sample11_05 {
public static void main(String[] args){
System.out.println( 10 / 4);//切り捨て発生
}
}
コマンドライン
> javac Sample11_05.java
> java Sample11_05
2
10/4 = 2 !?
壊れちゃった?
私、超能力者かも!
超能力のくだりは忘れてくれ。
恐ろしいことに、これは仕様だ。
2.Javaの気持ち
Java的には以下の様に
処理されている。
/*** Javaの気持ち ***/
んー。「10」は intだな。
あー。「 4」も intだな。
まぁ答えも intでいいだろう。
いいわきゃないだろ。
「10」と「4」が
intのリテラルだったのが原因なのね・・・。
でもコレ不便過ぎない?
万人受けしないことは認めよう。
Javaでは「int 同士の演算結果は intになる」というルールがあります。
10/4=2.5 ですが、2.5が int(整数)に切り捨てられて、2 になったわけです。
整数同士の 四則演算や余りの計算で、
答えが小数になる可能性があるのは
割り算だけっスね。
その通り。
割り算だけはオペランドの1つを
実数にしないと、
切り捨てが発生してしまう。
次のページに演算時のデータ型に関するルールをまとめています。
面倒なのは、整数同士の割り算くらいでしょう。
3.対処方法
答えを実数で得たい場合には、式の中の数値の一つを「実数」にします。
数値の後ろに「.0」と付け加えると、doubleのリテラルとして扱われます。
値が変数の場合には、キャスト演算子による型変換が必要です。
割り算の切り捨て対策
数値の後ろに「.0」と付け加えると、クールに回避できます。
では改めまして。
//Sample11_06.java
class Sample11_06 {
public static void main(String[] args){
System.out.println( 10.0 / 4);//実数の明示
}
}
コマンドライン
>javac Sample11_06.java
>java Sample11_06
2.5
今度は大丈夫ですね。
お疲れ様でした。