错误的代码或奇怪的数学行为? (python 3)

时间:2014-01-09 21:01:19

标签: python math python-3.x rounding

我通过乘法等计算变量  我注意到这种奇怪的行为。

如果我使用这些计算:

CD = 6
CDR = 0.4

CD = float(CD) - (float(CDR) * float(CD))

从理论上讲,这将是6 - (6 * 0.4)= 6 - 2.4 = 3.6如果我打印(CD)它打印

3.5999999999999996

我有什么理由可以避免吗?是否有一种方法,比如math.ceil来舍入数字但是到某个小数,例如x.xxxxx(第5个十分)?

(请告诉我,如果我在这篇文章中做错了什么,我会在这个网站上找到答案一段时间但之前从未发布过,所以我可能做错了什么,提前道歉。)

3 个答案:

答案 0 :(得分:2)

你可以试试decimal模块,但是你的答案仍然是“正确的”。这就是浮点数如何转换为十进制表示。

答案 1 :(得分:0)

您正在遇到浮点运算问题。尝试使用decimal.Decimal代替float

答案 2 :(得分:0)

如果只是为了显示(或心灵)你可以做

x = math.ceil(x*100000.0) / 100000.0

然而,无法保证该数字可以在内存中完全表示(最终使用相同的3.599999999 ..)