代码之家  ›  专栏  ›  技术社区  ›  Pyrolistical

为什么浮点数的尾随值为.0,而它正好是一个整数?

  •  2
  • Pyrolistical  · 技术社区  · 15 年前

    仔细阅读这个问题,因为我 不问 如何去掉尾随的零,这很简单。

    我想问的是,为什么123d会变成“123.0”?

    IEEE 64位浮点可以精确地表示0到2^52之间的整数,因此这不是精度损失,而是在实现Double.toString()期间的一个决定。

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

    3 回复  |  直到 12 年前
        1
  •  8
  •   Mike Burton    15 年前

    除此之外,它还带来了表示的清晰性——当一个看似整数值的东西在一次简单的算术运算后突然在小数点后有一长串数字时,用户往往会感到困惑。

        2
  •  5
  •   jqno    15 年前

    这样,更容易看出它实际上是一个double,而不是int,我猜:)。

        3
  •  0
  •   Bill K    15 年前

    toString是一种非常特殊的方法。它并不意味着任何想象中的“用户显示字符串”(尽管它经常与“字符串”的toString方法一致)

    实际上,开发人员可以立即了解对象是什么(主要是作为调试输出)。

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

    在Java代码中,0.0自动转换为double,因此double打印为0.0是非常合理的,它表示“这是一个double”。我有点惊讶它没有以“f”或“d”结尾,但这实际上会很烦人,因为int的toString真的很有用,并且在后面不断地加上“I”会让每个人都生气。