2009-10-22 74 views
2

仔细阅读这个问题,因为我是不要求如何摆脱尾随零,这很容易。为什么浮点数只有在整数时才会拖尾?

我在问的是为什么123d变成“123.0”?

IEEE 64位浮点数可以完全表示从0到2^52的整数,所以这不是精度上的损失,而是Double.toString()的实现过程中的决定。

我的问题是他们为什么做这个决定,他们这样做?他们为什么不打印123?

回答

8

其中,它导致了表达的清晰度 - 当简单的算术运算后,似乎是一个整数值的用户突然在小数点后突然出现一串数字,经常会感到困惑。

+0

打印一个int,看起来像一个int。打印一张双面,看起来像双。世界是有道理的。 – 2009-10-22 22:14:41

+0

发生这种情况时我会感到害怕。数值方法教给我的确切原因,在这种情况下。 – 2009-10-22 22:30:13

+0

我想这是要求太多以获得一致的“数字”抽象 – Pyrolistical 2013-05-22 20:25:10

5

这样,它会更容易看出它实际上是一个双精度值,而不是整数,我猜:)。

0

toString是一种非常特殊的方法。它不会被任何想象的延伸是指“用户显示字符串”(尽管它常常不谋而合,与“字符串的” toString方法)

它实际上是为开发者能够立即神交对象是什么(主要作为调试输出)。

对于用户要打印的任何内容,无论如何都应该通过格式化程序进行渲染,以确保正确的最大大小,小数点数和小数点指示符(。或)。

在Java代码中,0.0会自动转换为double,因此双精度打印为0.0意味着“这是双精度”是非常合理的。我有点惊讶它不会以“f”或“d”结束,但实际上这实际上很烦人,因为int的toString真的非常有用,并且不断地跟着它以“i”会生气大家都离开了

+0

是的,op应该采用格式化的方法。 – 2009-10-22 23:59:24

相关问题