当您将一个
有没有一种方法可以从浮点数中得到一个漂亮的圆整的
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
?
repr
完全相同(类似于Burger和Dybvig)。 - Mark Dickinson