【发布时间】:2014-10-06 18:00:37
【问题描述】:
有没有比我在 Python 中舍入小数的方式更好(更快、更高效或“更 Pythonic”)的方式?我想出了以下几点:
sign, digits, exponent = the_number.as_tuple()
Decimal((sign, digits[:exponent+len(digits)+decimal_places],-decimal_places))
编辑: 我最终使用了另一种更快的解决方案[1],并且还将小数“填充”到所需的精度:
decimal.Decimal('%.*f' % (decimal_places, number))
[1] 速度快到小数点后 200 位。在我的情况下,我得到一个随机浮点值,我想将其“转换”为十进制,因此原始精度已经受到限制并且
【问题讨论】:
-
你不只是四舍五入;您的代码更改了小数点的值。那是你要的吗?例如,如果
decimal_places = 5,则the_number = Decimal('1000')变为Decimal('0.01000')。 -
不,这不是故意的,而是完全错误的。我没有考虑整数小数,因为它们永远不会出现在我的代码中。但我的代码仍然是错误的,为了安全起见,我不会使用它;)
-
您想四舍五入到特定的指数(例如,到最接近的十分位,或到小数点后的某些位数),还是要四舍五入到特定数量的有效数字?
标签: python-2.7 decimal rounding