小数不准确

NDe*_*vox 0 python decimal python-3.x

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

显然,我这样做的主要原因是准确性.

我之前没有使用过十进制,所以我想先玩一下.我做的第一件事是:

>>> x = Decimal(7.2)
>>> x
Decimal('7.20000000000000017763568394002504646778106689453125')
Run Code Online (Sandbox Code Playgroud)

现在考虑小数意味着准确,并避免像浮动一样长拖尾数字,我很惊讶地看到这种情况发生.尽管标准预设为28,但它也达到了50 DP(并且无论你设置预设也无关紧要.

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

pok*_*oke 5

Decimal(7.2)将从float的确切值创建一个小数7.2.由于浮点数Decimal不精确,同时,创建小数将会将浮点数的不准确性转换为小数,从而产生您在那里看到的结果.

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

Decimal('7.2')
Run Code Online (Sandbox Code Playgroud)