【问题标题】:Most Pythonic way to print *at most* some number of decimal places [duplicate]大多数Pythonic方式打印*最多*一些小数位[重复]
【发布时间】:2013-02-06 12:19:43
【问题描述】:

我想格式化最多包含 2 个小数位的浮点数列表。但是,我不想要尾随零,也不想要尾随小数点。

例如,4.001 => 4, 4.797 => 4.8, 8.992 => 8.99, 13.577 => 13.58

简单的解决方案是('%.2f' % f).rstrip('.0')('%.2f' % f).rstrip('0').rstrip('.')。但是,这看起来相当丑陋,而且似乎很脆弱。任何更好的解决方案,也许有一些神奇的格式标志?

【问题讨论】:

  • 我是否错过了这里的重点,或者round()函数呢:docs.python.org/2/library/functions.html#round
  • 不过,我不得不说,我不太喜欢涉及 round 的解决方案,因为我很紧张,总有一天我会得到 1.1000000000009962 作为输出。
  • 啊,这不是重复的!我不想尾随.0。另一个问题允许这样做。
  • @nneonneo 我相信int() 将摆脱.0,但请谨慎使用,因为它会摆脱任何其他小数位(所以也许是 if/else 语句?)跨度>
  • @Haidro: ...现在这越来越恶心了。我希望我不需要if/else,或者我只是以'.%2f' % f 或其他东西为条件。 (仍然很难有一个好的解决方案......我真的习惯了在 Python 中非常简单的事情)

标签: python floating-point string-formatting


【解决方案1】:

你需要将0.分开剥离;这样你就永远不会剥离自然的0

或者,使用format() 函数,但这实际上归结为同一件事:

format(f, '.2f').rstrip('0').rstrip('.')

一些测试:

>>> def formatted(f): return format(f, '.2f').rstrip('0').rstrip('.')
... 
>>> formatted(0.0)
'0'
>>> formatted(4.797)
'4.8'
>>> formatted(4.001)
'4'
>>> formatted(13.577)
'13.58'
>>> formatted(0.000000000000000000001)
'0'
>>> formatted(10000000000)
'10000000000'

【讨论】:

  • +1:我想这是我独立得出的结论。我希望有一个更好的解决方案,但可能根本就没有。谢谢!
【解决方案2】:

g 格式化程序将输出限制为n 有效数字,删除尾随零:

>>> "{:.3g}".format(1.234)
'1.23'
>>> "{:.3g}".format(1.2)
'1.2'
>>> "{:.3g}".format(1)
'1'

【讨论】:

  • 如果您只有一个{} 模板,您可以使用format() function。例如format(f, '.3g')。这甚至适用于 0。
  • 几乎...除了它打印最多三位数字,而不是最多两位小数。 (例如:'{:.3g}'.format(13.468) 打印 13.5 而不是 13.47
  • 啊,当涉及指数时它也会做错事。
  • 好的,我想你可以做"{0:.{1}g}".format(13.468, 2+len(str(int(13.468)))),但我猜这不是真正的 Pythonic :)
【解决方案3】:

通常使用 String[s] 可能会很慢。 但是,这是另一种解决方案:

>>> from decimal import Decimal
>>> precision = Decimal('.00')
>>> Decimal('4.001').quantize(precision).normalize()
Decimal('4')
>>> Decimal('4.797').quantize(precision).normalize()
Decimal('4.8')
>>> Decimal('8.992').quantize(precision).normalize()
Decimal('8.99')
>>> Decimal('13.577').quantize(precision).normalize()
Decimal('13.58')

您可以在这里找到更多信息:http://docs.python.org/2/library/decimal.html

【讨论】:

    猜你喜欢
    • 2018-01-16
    • 2017-05-04
    • 2012-09-06
    • 1970-01-01
    • 2013-12-30
    • 1970-01-01
    • 2020-03-10
    • 1970-01-01
    相关资源
    最近更新 更多