当前位置: 首页 > 面试题库 >

双减法精度问题

吴丁雷
2023-03-14
问题内容

我的同事做了这个实验:

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的