我的同事做了这个实验:
public class DoubleDemo {
public static void main(String[] args) {
double a = 1.435;
double b = 1.43;
double c = a - b;
System.out.println(c);
}
}
对于这个一年级的操作,我希望得到以下输出:
0.005
但是意外的输出是:
0.0050000000000001155
为什么在如此简单的操作中double会失败?而且如果double不是这项工作的数据类型,我应该使用什么?
double
在内部以分数形式存储在 二进制文件中 -例如1/4 + 1/8 + 1/16 + ...
值0.005
-或值1.435
-不能以精确的分数形式存储在二进制中,因此double
不能存储精确的值0.005
,并且相减后的值也不太精确。
如果您关心精确的十进制算术,请使用BigDecimal
。
您可能还会发现本文很有用。
问题内容: java中双值的乘法运算符的保证精度是多少? 例如,2.2 * 100是220.00000000000003,但是220是双精度数。220.00000000000003是220之后的下一个两倍。 问题答案: 乘法工作正常,但不能精确表示为双精度。最接近的双打是: 2.199999999999999733(0x4001999999999999) 2.200000000000000177(
对于实现精确 IEEE 754 算术的 C99 编译器,是否存在型的 、的值,使得 ? 编辑:所谓“实现精确的IEEE754算法”,我指的是一个正确地将FLT_EVAL_METHOD定义为0的编译器。 提供符合IEEE 754标准的浮点数的C编译器只能将单精度除法替换为常数,如果所述逆本身可以完全表示为。 实际上,这种情况只发生在2的幂上。因此,程序员Alex可能确信< code>f / 2.0f
问题内容: 是一个字符串,而%d是一个小数,我想…但是放入时 ..引发异常,告诉我!= lang.double。有想法吗? 问题答案: 是供整数使用的,它同时适用于和类型:
js小数点加减法结果怎么得到正确值。 这输出的结果是无限接近值,要怎么取得正确结果呐?
问题内容: 我该如何克服Java android中双精度乘法的精度问题?请注意,我正在将字符串值转换为double值。 例如:当我将两个double值相乘时: 我得到以下结果:0.8999999999999999 我得到的一些结果是。 0.6 * 3 = 1.7999999999999998; 0.2 * 0.2 = 0.04000000000000001; 等等 除了上述结果外,我想得到以下结果
问题内容: 似乎减法正在引发某种问题,并且结果值是错误的。 78.75 = 787.5 * 10.0 / 100d 708.75 = 787.5-78.75 877.8499999999999 = 1586.6-708.75 最终的期望值为877.85。 应该怎么做才能确保计算正确? 问题答案: 要控制浮点算术的精度,应使用java.math.BigDecimal。阅读John Zukowski的