int同士の割り切れない割り算 int 切り捨て - 萌えJava超入門
第五章 演算子

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

今度は大丈夫ですね。

お疲れ様でした。




© 2019 awasekagami