我正在将我使用浮点数制作的程序转换为小数。
显然,我这样做的主要原因是为了准确。
我之前没有使用小数,所以我认为我先玩一玩。我做的第一件事是:
>>> x = Decimal(7.2)
>>> x
Decimal('7.20000000000000017763568394002504646778106689453125')
现在考虑小数意味着准确并且避免像花车一样长拖尾数字,我很惊讶地发现这种情况发生了。它也走到了50 D.P.尽管标准预设为28(并且你设置预设也没关系。
这是一个错误(|功能)吗?为什么会这样?
答案 0 :(得分:5)
Decimal(7.2)
将根据float 7.2
的确切值创建小数。由于float不精确,而Decimal
是,创建小数会将浮点数的不准确性转换为小数,从而产生你在那里看到的结果。
要创建7.2的精确小数,您需要将其指定为字符串:
Decimal('7.2')
答案 1 :(得分:0)
这种情况发生了,因为您提供的浮点文字无法以二进制形式准确表示。你应该提供一个字符串:
Decimal('7.2')
或使用整数:
Decimal(72) / 10