在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,这听起来对我不好!