Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python乘法运算返回假重复小数_Python_Decimal_Repeat_Operation - Fatal编程技术网

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

Python乘法运算返回假重复小数,python,decimal,repeat,operation,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.

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

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.19999999999999,但它甚至不是真的,试着自己做140*6.38,它正好是893.2 PS!它必须是一个浮点数,在我的项目说明中,它不能被四舍五入为整数,所以像在前面放一个整数这样的答案对我没有任何帮助。

这与python中浮点数的内部表示有关。从:

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

0.1 0.10000000000000055115123125782702118158340454015625

因此,最好指定所需的精度float{0:.2f}.format13.94999999999


这是一个。如果您阅读了文档,文档中说这个问题是由于它试图生成尽可能准确的数字造成的,那么有一些方法可以解决这个问题,例如使用内置函数舍入,在您的情况下,可以在第十位之后的任何位置舍入,这将解决您的问题。

请参阅您可以使用,但由于这是一项作业,你的导师可能会有其他想法。考虑问问他们。事实上,893.1999999999999…数学上等于893.2,所以这里没有错误@Chris,这是我在这门课上必须做的最后一个程序,我应该用我学到的东西来完成它,但是我们没有学到任何关于十进制模块的东西,所以是的,这不是它应该工作的方式。说明书甚至给出了我使用的公式,所以那里也不会有任何错误。此外,他们还展示了该计划的最终结果,在那里,它表现得非常好。