ここから本文です

javaを勉強し始めたばかりで型についてまだよくわからないのですが、下記のプログ...

アバター

ID非公開さん

2019/6/2813:58:31

javaを勉強し始めたばかりで型についてまだよくわからないのですが、下記のプログラムはなぜこのような実行結果になるのですか?

0.1のような形で0.9まで表示したいときはどこを直せばよいのでしょうか?
-----------------------------------------------------

public class Main {

public static void main(String[] args) {

double sum = 0.0;

for (int i = 1; i <= 10; i++) {

sum += 0.1;

System.out.println(sum);

}

}

}

----------------------------------------------------
【実行結果】
0.1
0.2
0.30000000000000004
0.4
0.5
0.6
0.7
0.7999999999999999
0.8999999999999999
0.9999999999999999

閲覧数:
22
回答数:
2
お礼:
500枚

違反報告

ベストアンサーに選ばれた回答

ikt********さん

2019/6/2815:28:17

浮動小数点数 って、そういうものです。
Javaに限ったことではありません。
https://engineer-club.jp/java-double#-double-2

ほんとに計算上正確に 0.3 にしたいなら、言語組み込みの
基本型doubleでは、できません。
https://docs.oracle.com/javase/jp/8/docs/api/java/math/BigDecimal.h...

表示上 0.3 になればいいだけなら
System.out.println(sum);

System.out.printf("%.1f%n", sum);
のように、書式整形使えば、見かけそうなります。

double変数の中味の誤差が、消えて無くなるわけではありません。
精度を指定した String.format の過程で、半切り上げが行われ
て文字化されるから、そう見えるようになるだけです。
https://docs.oracle.com/javase/jp/8/docs/api/java/util/Formatter.ht...

アバター

質問した人からのコメント

2019/6/28 16:40:53

double型の仕様なのですね。
ありがとうございました。
丸めの方法も教えていただきありがとうございました。

ベストアンサー以外の回答

1〜1件/1件中

you********さん

2019/6/2814:08:39

丸め誤差ですね、よくある話です。

BigDecimalを使うとか対策があります。
https://www.sejuku.net/blog/25564

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる