0

以下值给了我错误的精度。只有特定的数字才能观察到。这可能是一个浮动表示问题,但想知道具体原因。

String m = "154572.49"; //"154,572.49";
Float f = Float.parseFloat(m);
System.out.println(f);

它正在打印的输出154572.48不是154572.49.

4

3 回答 3

3

如果您希望十进制数字与您在 Java 中输入的完全相同,请使用BigDecimal而不是 float。

浮点数对于小数来说本质上是不准确的,因为许多以十进制结尾的数字(例如 0.1)是二进制中的重复数字,并且浮点数以二进制表示形式存储。

于 2013-02-07T11:27:24.603 回答
1

你必须阅读这个每个计算机科学家都应该知道的关于浮点运算的知识

将无限多个实数压缩为有限位数需要近似表示。尽管整数有无限多,但在大多数程序中,整数计算的结果可以存储在 32 位中。相反,给定任何固定位数,大多数实数计算将产生无法使用那么多位精确表示的量。因此,浮点计算的结果必须经常四舍五入以适应其有限表示。这种舍入误差是浮点计算的特征。

于 2013-02-07T11:30:43.470 回答
1

Float 提供以 2 为基数的十进制数表示。当您解析时,它正在解析几乎永远不会准确的十进制数的二进制表示。你可能会从它的二进制表示中得到 .4856(好吧,我没有进行计算,它只是让你知道的猜测)。

于 2013-02-07T11:30:59.193 回答