gpt4 book ai didi

java - 加减 double 会产生奇怪的结果

转载 作者:IT老高 更新时间:2023-10-28 21:12:51 28 4
gpt4 key购买 nike

所以当我在 Java 中使用 Doubles 进行加法或减法时,它会给我带来奇怪的结果。以下是一些:

如果我添加 0.0 + 5.1,它会给我 5.1。没错。

如果我添加 5.1 + 0.1,它会给我 5.199999999999(重复 9 的数量可能会关闭)。错了。

如果我减去 4.8 - 0.4,它会得到 4.39999999999995(同样,重复的 9 可能会关闭)。错了。

起初我以为这只是用十进制值添加 double 的问题,但我错了。以下工作正常:

5.1 + 0.2 = 5.3
5.1 - 0.3 = 4.8

现在,添加的第一个数字是保存为变量的 double ,尽管第二个变量从 JTextField 中获取文本。例如:

//doubleNum = 5.1 RIGHT HERE
//The textfield has only a "0.1" in it.
doubleNum += Double.parseDouble(textField.getText());
//doubleNum = 5.199999999999999

最佳答案

在 Java 中,double 值为 IEEE floating point numbers .除非它们是 2 的幂(或 2 的幂之和,例如 1/8 + 1/4 = 3/8),否则即使它们具有很高的精度,也无法精确表示。一些浮点运算会加重这些 float 中存在的舍入误差。在上述情况下,浮点错误已经严重到足以显示在输出中。

无论是从 JTextField 解析字符串还是指定 double 文字,数字的来源是什么都无关紧要——问题在于继承浮点表示。

解决方法:

  • 如果你知道你只有这么多小数点,那就用整数算术,然后转换为小数:

    (double) (51 + 1) / 10
    (double) (48 - 4) / 10
  • 使用BigDecimal

  • 如果你必须使用 double,你可以减少浮点错误与 Kahan Summation Algorithm .

关于java - 加减 double 会产生奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15625556/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com