当您将 a 转换为float
时Decimal
,Decimal
将包含尽可能准确的二进制数表示。准确是很好的,但它并不总是你想要的。由于许多十进制数不能精确地用二进制表示,因此结果Decimal
会有些偏差 - 有时有点高,有时有点低。
>>> from decimal import Decimal
>>> for f in (0.1, 0.3, 1e25, 1e28, 1.0000000000001):
print Decimal(f)
0.1000000000000000055511151231257827021181583404541015625
0.299999999999999988897769753748434595763683319091796875
10000000000000000905969664
9999999999999999583119736832
1.000000000000099920072216264088638126850128173828125
理想情况下,我们希望Decimal
四舍五入到最可能的十进制等值。
我尝试转换为,str
因为Decimal
从字符串创建的将是准确的。不幸的是str
,回合有点太多了。
>>> for f in (0.1, 0.3, 1e25, 1e28, 1.0000000000001):
print Decimal(str(f))
0.1
0.3
1E+25
1E+28
1.0
Decimal
有没有办法从浮动中获得一个很好的圆形?