gpt4 book ai didi

java - 为什么 0.1 正确地表示为 float ? (我知道为什么不是 2.0-1.9 的结果)

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:08:08 25 4
gpt4 key购买 nike

我最近阅读了很多关于浮点表示的内容(包括:How To Represent 0.1 In Floating Point Arithmetic And Decimal)。现在我明白 0.1 不能正确表示,当我这样做时:

System.out.println(2.0f - 1.9f);

我永远得不到准确的结果。

所以问题是:为了正确打印 0.1,如何在以下代码中表示 0.1f?那是某种合成糖吗?在我上面提到的文章中说:0.1在内存中表示为0.100000001490116119384765625。那么为什么我没有得到这段代码的输出:

System.out.println(0.1f);

Java 如何处理这个问题?

最佳答案

System.out.println 对 float 和 double 执行一些舍入。它使用 Float.toString(),它本身(在 oraclew JDK 中)委托(delegate)给 FloatingDecimal 类 - 您可以查看 the source of FloatingDecimal#toJavaFormatString()血淋淋的细节。

如果你尝试:

BigDecimal bd = new BigDecimal(0.1f);
System.out.println(bd);

您将看到 0.1f 的实际值:0.100000001490116119384765625。

关于java - 为什么 0.1 正确地表示为 float ? (我知道为什么不是 2.0-1.9 的结果),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12128829/

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