请仔细阅读此问题,因为我没有要求如何摆脱尾随零,这很容易。
我问的是为什么123d会变成“123.0”?
IEEE 64位浮点数可以精确地表示0到2 ^ 52之间的整数,因此这不是精度损失,而是Double.toString()实现过程中的决定。
我的问题是他们为什么做出这样的决定呢?为什么他们不只是打印123?
答案 0 :(得分:8)
除此之外,它还会导致表示的清晰度 - 当一个看似整数的值突然在一个简单的算术运算后的小数位后面有一长串数字时,用户常常感到困惑。
答案 1 :(得分:5)
这样,我觉得它更容易看到它实际上是双重的,而不是int,我猜:)。
答案 2 :(得分:0)
toString是一种非常特殊的方法。它并不意味着“用户显示字符串”的任何想象力(虽然它经常碰巧,如“字符串”toString方法)
实际上,开发人员能够立即了解对象是什么(主要是作为调试输出)。
对于用户要打印的任何内容,它应该通过格式化程序呈现,以确保正确的最大大小,小数点数和小数指示符(。或,)。
在Java代码中,0.0会自动转换为double,因此将double打印为0.0非常合理 - 这意味着“这是一个双倍”。我有点惊讶它不会以“f”或“d”结尾,但实际上这真的很烦人,因为int的toString真的非常有用并且不断地用“i”跟着它会生气大家都没了。