在java中计算十进制值时遇到问题

在java中计算十进制值时遇到问题,java,Java,产生 double x = 0.00090; double b = 0.00100; double c = x - b; 而不是 -1.0000000000000005E-4 -8.999999999999999E-5 及 产生 double x = -0.09; double b = 0.001; double c = x * b; 而不是 -1.0000000000000005E-4 -8.999999999999999E-5 我也试过了 -0.00009

产生

double  x = 0.00090; 
double b = 0.00100;
double c = x - b;
而不是

-1.0000000000000005E-4
-8.999999999999999E-5

产生

double  x = -0.09;       
double b = 0.001;
double c = x * b;
而不是

-1.0000000000000005E-4
-8.999999999999999E-5
我也试过了

-0.00009

但它会产生相同的结果或小数后数字范围不完整的结果。

这就是规范中定义数字运算的方式

十进制数在内部表示为最接近的近似值,在某些情况下不是精确的文字值。


如果需要精确的数值计算,则必须使用
BigDecimal

这就是规范中定义数值运算的方式

十进制数在内部表示为最接近的近似值,在某些情况下不是精确的文字值。


如果需要精确的数值计算,则必须使用
BigDecimal

答案是正确的。您可能想了解一下双精度数字是如何存储在二进制数字中的。因为它是2号基地。如果我们使用基数3,那么在正常数字中,2/3将是0.6666。。。但是“三位数”是0.2,答案是正确的。您可能想了解一下双精度数字是如何存储在二进制数字中的。因为它是2号基地。如果我们使用基数3,那么在正常数字中,2/3将是0.6666。。。但在“三位数”中,它将是0.2

符号
E
让您感到困惑(解释它是如何工作的)

用标准符号和

-0.00010000000000000005


用标准符号。您看到的所有答案都是正确的(几乎,但它们非常接近,十进制数学),只需使用
E
符号即可

符号
E
让您感到困惑(解释它是如何工作的)

用标准符号和

-0.00010000000000000005

用标准符号。您看到的所有答案都是正确的(几乎,但它们非常接近,十进制数学),只需使用
E
符号即可

试试这个:

-0.00008999999999999999
对于精确的计算,如货币计算,您应该使用大小数,因为它们具有所需的精度,并且不会失去任何精度

如果您喜欢不带“E”的打印,请尝试以下行:

    double  x = 0.00090; 
    double b = 0.00100;

    BigDecimal xd = new BigDecimal(x).setScale(10, RoundingMode.HALF_UP);
    BigDecimal bd = new BigDecimal(b).setScale(10, RoundingMode.HALF_UP);
    BigDecimal cd = xd.multiply(bd);
    double c = cd.doubleValue();

    System.out.println(c);
试试这个:

-0.00008999999999999999
对于精确的计算,如货币计算,您应该使用大小数,因为它们具有所需的精度,并且不会失去任何精度

如果您喜欢不带“E”的打印,请尝试以下行:

    double  x = 0.00090; 
    double b = 0.00100;

    BigDecimal xd = new BigDecimal(x).setScale(10, RoundingMode.HALF_UP);
    BigDecimal bd = new BigDecimal(b).setScale(10, RoundingMode.HALF_UP);
    BigDecimal cd = xd.multiply(bd);
    double c = cd.doubleValue();

    System.out.println(c);

0.00090-0.00100
如何等于
-0001
?它等于
-0.0001
,它等于
-1.00e-4
。使用
系统输出打印LN(字符串格式(%.5f',c))阅读答案,你会看到你想要的。@Blip如果它像4-3,那么它将产生1.00000,这听起来对我不好!
0.00090-0.00100
如何等于
-0001
?它等于
-0.0001
,它等于
-1.00e-4
。使用
系统输出打印LN(字符串格式(%.5f',c))阅读答案,你会看到你想要的。@Blip如果它像4-3,那么它将产生1.00000,这听起来对我不好!