提问人:Kyle 提问时间:11/2/2018 更新时间:11/2/2018 访问量:111
使用十进制数 Python 进行字符串格式化
String Formatting with Decimal Number Python
问:
我正在编写一份报告。报告中的一个数字需要以百万表示。我编写了一些基本的格式化程序来处理各种类型的格式,这些格式需要在整个报表中保持一致。为此,我使用 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 = 350000
b = 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
答: 暂无答案
评论
b
Decimal