Python乘法运算返回false重复小数

时间:2017-03-12 17:20:42

标签: python decimal repeat operation

当我遇到一个我尝试了很多不同方法来解决它后无法理解的问题时,我正在为一个学校项目做我的程序。我有一个函数可以做一个简单的数学运算:

def pikkus(kogupikkus, loimed):
    summa = loimed * (kogupikkus * 1.2 + 0.5)
    return (summa)

现在,当给出函数编号4.9和140(按照相同的顺序)时,它返回一个不正确的数字,因为4.9 * 1.2 + 0.5 = 6.38和140 * 6.38 = 893.2,但我得到的只是是 893.1999999999999 ,但它甚至不是真的,尝试自己做140 * 6.38 - 它正好是893.2 PS!它必须是一个浮点数,在我的项目指令中它不能舍入为整数,所以答案就像“只是放一个圆()前面而你很好”根本不帮助我。

2 个答案:

答案 0 :(得分:0)

这与python中浮点数的内部表示有关。来自docs

  

很容易忘记存储的值是原始小数的近似值,因为浮点数在解释器提示符处显示的方式。 Python仅将十进制近似值打印到机器存储的二进制近似值的真实十进制值。如果Python要打印存储为0.1的二进制近似值的真实十进制值,则必须显示

     
    
      

0.1       0.1000000000000000055511151231257827021181583404541015625

    
  

因此您最好指定所需的精度float("{0:.2f}".format(13.949999999999999))

来自here

答案 1 :(得分:0)

这是floating point precision problem。如果您阅读文档,它说这个问题是由于它试图生成尽可能准确的数字,有很多方法可以绕过这个问题,例如使用内置函数round()进行舍入,在您的情况下可以在十分之后的任何地方四舍五入,它可以解决你的问题。