【发布时间】:2014-06-28 07:05:00
【问题描述】:
我有一个 python Decimal(货币金额),我想四舍五入到小数点后两位。我尝试使用常规的 round() 函数来执行此操作。不幸的是,这会返回一个浮点数,这使得继续不可靠:
>>> from decimal import Decimal
>>> a = Decimal('1.23456789')
>>> type(round(a, 2))
<type 'float'>
在十进制模块中,我看到了一些与舍入有关的事情:
- ROUND_05UP
- ROUND_CEILING
- ROUND_DOWN
- ROUND_FLOOR
- ROUND_HALF_DOWN
- ROUND_HALF_EVEN
- ROUND_HALF_UP
- ROUND_UP
- 圆角
我认为这些都没有真正提供我想要的东西(或者我错了吗?)。
所以我的问题是:有人知道我如何可靠地将 Python 小数四舍五入到小数点后 2 位,以便我可以继续使用小数吗?欢迎所有提示!
【问题讨论】:
-
使用整数(美分而不是美元)不是更有意义吗?那也会更快。
-
设置十进制数的精度:
decimal.getcontext().prec=2. -
@ooga:它处理有效位数,而不是小数位数,因此不合适(它将
12345678变成1.2E+7,但仅在对其进行计算之后,而不是在定义之后)。 -
@TimPietzcker 我明白了。在这种情况下,我同意整数是最好的。
-
值得注意的是,
round确实使用 Python 3 直接返回了一个Decimal实例;它仅在 Python 2 上转换为float。尽管如此,如果您想要除默认的ROUND_HALF_EVEN舍入模式以外的任何其他内容,您仍然需要quantize。
标签: python floating-point decimal rounding floating-point-precision