gpt4 book ai didi

java - Java 如何往返 String -> float -> String 甚至对于(某些)不能表示为 float 的值?

转载 作者:搜寻专家 更新时间:2023-10-31 20:17:52 25 4
gpt4 key购买 nike

<分区>

正如在许多地方(例如 Why can't decimal numbers be represented exactly in binary? )所解释的那样,并非所有小数都可以表示为浮点值(例如存储在 Java 中的 float 中)。

给出的典型例子是“0.2”。根据这个漂亮的IEEE 754 Converter ,最接近 0.2 的 float 大约为 0.20000000298023224 ,因此将“0.2”解析为 float 应该会产生此结果。

但是,我注意到 Java 似乎能够完成不可能的事情:

String number="0.2";
float f = Float.parseFloat(number);
System.out.println("Result of roundtrip String -> float -> String: "+f);

打印:

Result of roundtrip String -> float -> String: 0.2

Test on IDeone.com

Java 如何知道我想要(四舍五入的)输出“0.2”,而不是上面解释的精确输出“0.20000000298023224”?

Javadocs of Float.toString()试着解释一下:

How many digits must be printed for the fractional part of m or a? There must be at least one digit to represent the fractional part, and beyond that as many, but only as many, more digits as are needed to uniquely distinguish the argument value from adjacent values of type float.

不幸的是,这让我更加困惑。为什么“根据需要打印尽可能多的数字以唯一区分参数值”允许 Java 打印“0.2”?

理想情况下,答案还可以解释为什么选择这种打印算法。是为了让(一些)往返工作,就像这个例子一样?还有别的动机吗?

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