【问题标题】:How to fix floating point decimal to two places even if number is 2.00000即使数字是 2.00000,如何将浮点小数固定到两位
【发布时间】:2015-08-07 17:47:45
【问题描述】:

这就是我所拥有的:
x = 2.00001

这就是我需要的:
x = 2.00

我正在使用:
float("%.2f" % x)

但我得到的只是:
2

如何将小数位限制为两位,并确保始终有两位小数,即使它们为零?
注意:我不希望最终输出是字符串。

【问题讨论】:

  • 你在哪里想要这个two decimal places?内部浮点数以二进制格式存储,它基本上取决于你想要这两个小数位格式化的浮点数
  • 嗨 Shil,你用这个做什么?如果需要值,那当然是2.00 == 2。如果需要显示,为什么不能转成字符串呢?
  • 您是否尝试使用浮点数来表示美元和美分的数量?由于浮点数的不精确性,通常不鼓励这样做。往往会有bad consequences,当货币交易最终在这里或那里减少一分钱时。
  • 如果你最后要调用float(),你如何格式化它并不重要。 2.0022.0完全相同
  • 也许使用decimal package

标签: python numbers format decimal floating-point-precision


【解决方案1】:

这行得通:

'%.2f" % float(x)

之前我是这样回答的:

这个怎么样?

def fmt2decimals(x):
  s = str(int(x*100))
  return s[0:-2] + '.' + s[-2:]

AFAIK 你不能使用像%.2f 这样的格式规范得到尾随零。

【讨论】:

  • 如果将数字存储为格式化字符串会很好,但 OP 希望将其存储为带有一定数量尾随零的浮点数,遗憾的是目前还不可能据我所知。
  • 好的 - 我想我现在明白这个问题了。
【解决方案2】:

如果您可以使用十进制 (https://docs.python.org/2/library/decimal.html) 而不是浮点数:

from decimal import Decimal
Decimal('7').quantize(Decimal('.01'))

quantize() 指定四舍五入的位置。

https://docs.python.org/2/library/decimal.html#decimal.Decimal.quantize

【讨论】:

    【解决方案3】:

    您看过decimal 模块吗?它允许您在保持适当精度的同时进行算术运算:

    >>> from decimal import Decimal
    >>> a = Decimal("2.00")
    >>> a * 5
    Decimal('10.00')
    >>> b = Decimal("0.05")
    >>> a * b
    Decimal('0.1000')
    

    【讨论】:

      【解决方案4】:

      Python 还有一个内置的“round”函数:x = round(2.00001, 2) 我相信你会使用这个命令。

      【讨论】:

      • 我试图最终将数字数据保存为csv文件,我宁愿在数字周围不加引号,同时与小数位数保持一致。
      • @Shil 这应该不是问题,假设您有一个类似list = [2.00001, 3.0134, 1.0] 的列表,并且您想将其写为一行 CSV。您可以像这样使用格式并加入:','.join(['{0:.2f}'.format(item) for item in list])。当您将其写入文件时,行周围不会有任何引号,它看起来像这样:2.00,3.01,1.00
      • 谢谢,但我确实需要将其保存为列表格式,以便我可以应用 insert() 之类的函数。
      • @Shil 我的评论是写给 .csv,你说一旦你完成了你所做的任何其他处理,你最终希望对列表中的数据进行处理
      • 显然,"%.2f" % x 工作得很好。是excel显示格式从2.00变为2。这是因为excel的默认单元格格式是'general';在这种情况下,它应该是“数字”。现在我基本上必须查找excel文件格式。谢谢大家。
      【解决方案5】:

      嗯,在 Python 中,如果结果不是字符串,就不能真正四舍五入到两个零。由于浮点整数的存储方式,Python 通常总是舍入到第一个零。不过,如果第二个数字为零,您可以四舍五入到两位数。

      例如,这个:

      round(2.00001, 2)
      #Output: 2.0
      

      对比这个:

      round(2.00601, 2)
      #Output: 2.01
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-01
        • 1970-01-01
        • 2023-01-08
        • 2011-11-18
        • 2018-10-31
        • 2010-10-08
        相关资源
        最近更新 更多