小数不准确

时间:2014-05-30 21:36:09

标签: python python-3.x decimal

我正在将我使用浮点数制作的程序转换为小数。

显然,我这样做的主要原因是为了准确。

我之前没有使用小数,所以我认为我先玩一玩。我做的第一件事是:

>>> x = Decimal(7.2)
>>> x
Decimal('7.20000000000000017763568394002504646778106689453125')

现在考虑小数意味着准确并且避免像花车一样长拖尾数字,我很惊讶地发现这种情况发生了。它也走到了50 D.P.尽管标准预设为28(并且你设置预设也没关系。

这是一个错误(|功能)吗?为什么会这样?

2 个答案:

答案 0 :(得分:5)

Decimal(7.2)将根据float 7.2的确切值创建小数。由于float不精确,而Decimal是,创建小数会将浮点数的不准确性转换为小数,从而产生你在那里看到的结果。

要创建7.2的精确小数,您需要将其指定为字符串:

Decimal('7.2')

答案 1 :(得分:0)

这种情况发生了,因为您提供的浮点文字无法以二进制形式准确表示。你应该提供一个字符串:

Decimal('7.2')

或使用整数:

Decimal(72) / 10