【发布时间】:2016-09-15 15:07:08
【问题描述】:
我试图了解 Python 的舍入和小数函数实际上是如何工作的。为此,我尝试运行此代码:
from decimal import Decimal
print("An integer %i and a float %.1f" %(23, 6.549))
print Decimal(6.549)
print Decimal(45.0)/Decimal(7)
print Decimal(45.0/7)
我得到了输出:
An integer 23 and a float 6.5
6.54900000000000037658764995285309851169586181640625
6.428571428571428571428571429
6.4285714285714288251938342000357806682586669921875
我试图从文档here 中了解轮函数的工作原理,它描述了 6.549 被转换为二进制浮点数并被二进制近似值替换。我对 Decimal(6.549) 的扩展值的近似值从何而来感到困惑。另外,我可以假设每个十进制值的四舍五入将以相同的方式工作还是取决于单个二进制近似值?
当我以两种不同的方式使用 Decimal 函数时,它给出的值略有不同。此外,一个值比另一个值具有更高的精度。有人可以说明原因吗?
提前致谢。
【问题讨论】:
-
Decimal无法修复已损坏的内容。 -
您是故意将浮点值传递给 Decimal()(因为您想看看它们的样子)还是想要真正的十进制值? (如果是后者,请在输入周围使用单引号。)
-
我故意使用浮点值,因为我想看看它们被四舍五入到哪个值。
标签: python-2.7 floating-point decimal rounding decimal-point