【问题标题】:The converted floating to decimal point?转换后的浮点数到小数点?
【发布时间】:2018-12-02 17:17:05
【问题描述】:

万一

x = 0.898558 #float with zero prefix

我试过了

from decimal import Decimal
x = 0.898558
print(Decimal(x))

输出:

0.898557999999999967855046634213067591190338134765625

我觉得我可以做点什么,我试过了

x = 0.898558
print('%.2f' % x)

输出:

0.89

如何删除0 数字,我想要这样的89

【问题讨论】:

  • 0.89 * 100 是89
  • 将x乘以100并使用“%.0f”进行格式化。
  • 仅供参考,名称Decimal 并不意味着它仅代表数字的“小数部分”。 Decimal 类只是使用不同的表示来存储使用基数 10 而不是基数 2 的浮点数,您可以配置精度。当您需要更好的精度和舍入时,应该使用这种表示法,例如在金融应用程序中。
  • 非常感谢,很有帮助
  • 你确定你的输出是0.89吗?我希望0.90。

标签: python python-3.x floating-point digits


【解决方案1】:

您可以通过将 int 转换为字符串并按小数点拆分来做到这一点。

x = str(x).split('.')[1]

【讨论】:

    【解决方案2】:

    它只是一个字符串,所以你可以切掉你想要的部分:

    print( ('%.2f' % x)[2:] )
    

    【讨论】:

      【解决方案3】:

      乘以 100,然后转换为 int:

      y = int(x*100)
      

      编辑:这是错误的。请参阅 cmets 中的讨论。

      【讨论】:

      • 当x 为 0.11999999999999999555910790149937383830547332763671875 时,此操作将失败。它产生 12,但是,给定 OP 的示例,结果应该是 11。
      • 你怎么把这个值赋给一个变量?我知道这里有一个有限的精度问题,但你如何复制它?至少在我的机器上, x = 立即导致 x = 0.12
      • 假设您的 Python 实现使用 IEEE-754 基本 64 位二进制浮点,您可以简单地使用 x=0.11999999999999999555910790149937383830547332763671875 分配值。它是完全可表示的,因此应正确转换为浮点数。它不会立即产生 0.12。使用默认格式打印会导致实际值转换为字符串“0.12”以进行输出,但内部值保持不变。如果您的 Python 实现具有良好的格式化代码,那么 print "%.99g" % x 应该会显示准确的值。
      【解决方案4】:

      如果它总是一个前面有零的小数,你可以这样打印:

      print(str(x)[2:4])
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-12-03
        • 1970-01-01
        • 2020-10-09
        • 1970-01-01
        • 2013-09-12
        • 2014-01-01
        • 1970-01-01
        相关资源
        最近更新 更多