1

私はJavaにはかなり慣れていませんが、コーディングの経験はある程度あります(主にPHPとC ++の一部)。

プログラムでの計算に問題があります。次のコードを実行すると:

public class Test {

    public static void main(String[] args) {
        double number = 2 - (0.10 + 1.05);
        System.out.println( number );

        if( number < 0.85 ) System.out.println("to small");

    }
}

私の出力は次のとおりです。

run:
0.8499999999999999
to small
BUILD SUCCESSFUL (total time: 0 seconds)

2 - ( 0.10 + 1.05 ) が 0.85 に等しいと予想していますが、何らかの理由でそうではありません。なぜこのように振る舞うのか誰にも分かりますか?

重要な場合は、netbeans を使用して Windows 8 でバージョン 7.3.1 と jdk7u25 をコーディングしています。他に追加すべきことがあれば教えてください。

/クリス

4

3 に答える 3

4

これは、浮動小数点数がその範囲内のすべての数値を正確に表すことはできず、それに近い値を取るためです。見る:

http://introcs.cs.princeton.edu/java/91float/

これが、金額の格納に float や double を使用してはならない理由でもあります。

于 2013-08-10T20:33:43.850 に答える
2

浮動小数点数は指数形式です。仮数部と指数部で構成されています。バイナリ コーディングのため、正確な数値には対応していませんが、それに近い数値です。

正確な数値を取得するには、BigDecimal - http://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.htmlを使用します。

于 2013-08-10T20:36:06.037 に答える
0

浮動小数点数は、あなたが思っているようには機能しないからです。簡単に言えば、すべての数値を浮動小数点形式で正確に表現できるわけではないため、浮動小数点データ型を使用すると、このようなことがわかります。

于 2013-08-10T20:31:50.193 に答える