gpt4 book ai didi

java - Java 模运算符的错误结果?

转载 作者:搜寻专家 更新时间:2023-11-01 01:04:20 25 4
gpt4 key购买 nike

我怀疑以前有人问过这个问题,但似乎找不到匹配的问题...

我正在使用 Scala,但我很确定这只是一个 Java 问题...输入值是 double 值

println(28.0 / 5.6) 
println(28.0 % 5.6)

这几行的结果是

5.0 
1.7763568394002505E-15

这意味着 Java 正在正确执行除法,但由于某种原因导致模数错误,因为对于任何解析为整数的除法问题,模数应该为 0...

有解决办法吗?

谢谢!

最佳答案

5.0 只是表明 Java 理解的精确结果比任何其他 double 值更接近 5.0。这并不意味着操作的精确结果是正好 5。

现在,当您询问模数时,您可以得到更精细的细节,因为结果不再固定为具有“5”部分。

这不是一个很好的解释,但想象一下您有一个精度为 4 位的十进制 浮点类型。 1000/99.99 和 1000 % 99.99 的结果是什么?

嗯,实际结果从 10.001001 开始 - 所以您必须将其四舍五入为 10.00。但是,余数是 0.10,您可以表示。所以,看起来除法给了你一个整数,但它并不完全

考虑到这一点,请记住 5.6 的字面值 实际上 5.5999999999999996447286321199499070644378662109375。现在很明显 28.0(*可以)除以该数字不等于 5。

编辑:现在,如果您使用BigDecimal 执行decimal 浮点运算的结果,则该值确实 正好是 5.6,并且有没问题:

import java.math.BigDecimal;

public class Test {
public static void main(String[] args) {
BigDecimal x = new BigDecimal("28.0");
BigDecimal y = new BigDecimal("5.6");

BigDecimal div = x.divide(y);
BigDecimal rem = x.remainder(y);

System.out.println(div); // Prints 5
System.out.println(rem); // Prints 0.0
}
}

关于java - Java 模运算符的错误结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7083625/

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