使用十进制数的Python字符串格式化

时间:2018-11-02 15:51:28

标签: python-3.x floating-point decimal string-formatting floating-accuracy

我正在构建报告。报告中的一个数字需要以百万为单位。我写了一些基本的格式化程序来处理在整个报告中需要保持一致的各种格式。为此,我使用了lambda函数和字符串格式。这两个功能如下。一种是四舍五入,另一种是格式化。

formatter_round = lambda x: 0 if (x is None or x is bool) else round(x/1000000,1)

formatter_dollar = lambda x: '${:,.1}'.format(0) if (x is None or x == 0) else ('${:,.1}'.format(x) if x >= 0 else '$({:,.1})'.format(abs(x)))

现在是问题所在。请参阅下面的示例。

我正在处理两个数字,a = 350000b = 850000

对于a,一切正常。四舍五入不一定是正确的浮点数(不是“我期望的是什么,而是可以理解的行为”),但是十进制是正确的。

a = 350000

formatter_dollar(formatter_round(a))
Out[89]: '$0.3'

a = Decimal(a)

formatter_dollar(formatter_round(a))
Out[91]: '$0.4'

但是,当我使用b运行相同的示例时,此操作将失败。

b = 850000

formatter_dollar(formatter_round(b))
Out[93]: '$0.8'

b = Decimal(b)

formatter_dollar(formatter_round(b))
Out[95]: '$0.8'

我的问题是,如何正确四舍五入并显示数字?

我认为我的问题是浮点数,a似乎证实了这一点。然后,当我对b执行相同操作时,我意识到情况并非如此。

0 个答案:

没有答案