【问题标题】:Python Format Decimal with a minimum number of Decimal Places具有最少小数位数的 Python 格式小数
【发布时间】:2012-06-26 05:36:52
【问题描述】:

我在 Python 中有一些 Decimal 实例。我希望将它们格式化为

Decimal('1')       => '1.00'
Decimal('12.0')    => '12.00'
Decimal('314.1')   => '314.10'
Decimal('314.151') => '314.151'

因此确保始终有至少两位小数,可能更多。虽然不乏四舍五入到n 小数位的解决方案,但我找不到确保数字下限的巧妙方法。

我目前的解决方案是计算:

first  = '{}'.format(d)
second = '{:.2f}'.format(d)

并取两者中较长的一个。但是,它似乎有些骇人听闻。

【问题讨论】:

  • 你的方式对我来说很好。你可以做max((first, second), key=len)
  • 我假设您的意思是十进制(浮点数)而不是十进制(字符串)。无论哪种方式,您都可以在字符串上调用 float()。
  • 十进制,如“从十进制导入十进制”类中,这与浮点数非常不同。
  • 明白了。不知道那件事。我的回答还能用吗?

标签: python format decimal


【解决方案1】:

如果您希望避免字符串问题:

if d*100 - int(d*100):
    print str(d)
else:
    print ".2f" % d

未经测试的代码,但它应该工作。

这样工作:

d = 12.345

100 次:

1234.5

减 int(1234.5)

1234.5 - 1234 = .5

.5 != 0

这意味着有 3 位或更多小数位。

打印 str(12.345)

即使你做 12.3405:

1234.05 - 1234 = .05

.05 != 0

但如果你有 12.3:

1230 - 1230 = 0

这意味着使用 %.2f 打印。

【讨论】:

    猜你喜欢
    • 2015-11-17
    • 1970-01-01
    • 1970-01-01
    • 2014-04-29
    • 2021-07-25
    • 2023-03-16
    • 1970-01-01
    • 2018-01-17
    • 1970-01-01
    相关资源
    最近更新 更多