2
public class TestMain {

    public static void main(String[] args) {
        Double value = 1.25 * ((19.6 / 100) + 1);
        System.out.println(value);
        Double value2 = (1.25 * (19.6 / 100)) + (1 * 1.25);
        System.out.println(value2);
    }
}

結果は次のとおりです。

1.4949999999999999
1.495

そして、なぜこれらが異なるのか理解できません...

Factoredさまざまなケースをテストするために括弧を明示的に追加しましたが、フォームが返さ1.49499れ、フォームが必要なものを返す理由がわかりませんdeveloped: 1.495

4

3 に答える 3

2

浮動小数点で正確な結果が必要な場合は、BigDecimal クラスを使用できます。

BigDecimal factor = new BigDecimal(19.6);
BigDecimal multiplier =  new BigDecimal(1.25);
BigDecimal oneHundred = new BigDecimal(100);
BigDecimal one = new BigDecimal(1);

BigDecimal res = multiplier.multiply(factor.divide(oneHundred).add(one));
System.out.println(res);

BigDecimal res2 = multiplier.multiply(factor.divide(oneHundred)).add(one.multiply(multiplier));
System.out.println(res2);

結果:

1.495000000000000017763568394002504646778106689453125
1.495000000000000017763568394002504646778106689453125
于 2013-07-24T11:43:50.067 に答える
1

基本概念
1. addition2 つのdecimal数を計算するときextends、小数点はありません。
2. multiplication2 つのdecimal数値を処理extendsする場合、必要に応じて小数点が表示されます。

Javaコードの概念を理解する

public static void main(String[] args) {
        Double v1 = (19.6/100);
        System.out.println("inti v1 = "+v1);
        v1 += 1; 
        System.out.println("1 + v1 = "+v1);
        v1 *= 1.25;
        System.out.println("Ans = 1.25 * v1 = "+v1);
        Double v2 = (19.6 / 100);
        Double v3 = (double) 1;
        System.out.println(" inti v2 = "+v2);
        System.out.println("inti v3 = "+v3);
        v2 *= 1.25;
        v3 *= 1.25;
        System.out.println("1.25 * v2 = "+v2);
        System.out.println("1.25 * v3 = "+v3);
        Double v4 = v2+v3;
        System.out.println("Ans v2 + v3 = v4 = "+v4);
    }}

出力

 1. inti v1 = 0.196
 2. 1 + v1 = 1.196
 3. Ans = 1.25 * v1 = 1.4949999999999999

 4. inti v2 = 0.196
 5. inti v3 = 1.0
 6. 1.25 * v2 = 0.245
 7. 1.25 * v3 = 1.25
 8. Ans v2 + v3 = v4 = 1.495

概念を簡単に理解できるように、出力に行番号を示します。

これは別のプログラムではなく、コード内の+/の数学に従う 1 つずつプロセスです。*

出力でわかるように、
Line 3Line 6Line 7そこでextended小数点で乗算を行います。
&ではLine 2、ご存知のようにLine 8、小数点を拡張して表示する最大の小数点を取得しません。additionaddition

于 2013-07-24T12:00:36.683 に答える