具有特定数字的浮动精度

时间:2013-02-07 11:24:28

标签: java floating-point floating-accuracy

以下值给出了错误的精度。仅使用特定数字观察到它。它可能是浮动表示问题,但想知道具体原因。

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

正在打印的输出是154572.48而不是154572.49

3 个答案:

答案 0 :(得分:3)

如果您希望十进制数字与您在Java中输入的完全一致,请使用BigDecimal代替浮点数。

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

答案 1 :(得分:1)

您必须阅读此What Every Computer Scientist Should Know About Floating-Point Arithmetic

  

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

答案 2 :(得分:1)

Float提供十进制数的基数2表示。解析时,它正在解析十进制数的二进制表示,几乎不会是精确的。你可以从它的二进制表示得到.4856(好吧,我没有做计算,它只是一个猜测,让你的想法)。