Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.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 - Fatal编程技术网

Python如何计算数字?

Python如何计算数字?,python,Python,可能重复: [4]中:52+121.2 Out[4]:173.199999999999简短回答:Python对浮点数使用二进制算术,而不是十进制算术。十进制分数不能精确地用二进制表示 长答案:如果你熟悉数字“十三点二”以十为底写为“13.2”,因为它是“10^1*1+10^0*3+10^-1*2”,那么试着对数字173.2以2为底而不是以10为底做同样的事情 以下是全部内容: (1*2^7)+(0*2^6)+(1*2^5)+(0*2^4)+(1*2^3)+(1*2^2)+(0*2^1)+(0*

可能重复:

[4]中:52+121.2


Out[4]:173.199999999999

简短回答:Python对浮点数使用二进制算术,而不是十进制算术。十进制分数不能精确地用二进制表示


长答案:

如果你熟悉数字“十三点二”以十为底写为“13.2”,因为它是“10^1*1+10^0*3+10^-1*2”,那么试着对数字173.2以2为底而不是以10为底做同样的事情

以下是全部内容: (1*2^7)+(0*2^6)+(1*2^5)+(0*2^4)+(1*2^3)+(1*2^2)+(0*2^1)+(0*2^0)

现在是开始部分: (0*2^-1)+(0*2^-2)+(1*2^-3)

这是.125,还不是2/10,所以我们需要更多的(1*2^-n)形式的添加,我们可以用(1*2^-4)+(1*2^-7)进一步执行,这让我们更接近。。。到0.1953125,但无论我们这样做多久,我们都永远不会得到“.2”,因为“.2”不能表示为(1*2^-n)形式的数字和的加法

另请参见.9999…=1.0(.)

尝试以下操作:

>>> from decimal import Decimal
>>> Decimal("52") + Decimal("121.2")
Decimal("173.2")

其他答案,指向好的浮点资源,是从哪里开始。但是,如果您理解浮点舍入错误,并且只想让数字看起来更漂亮,并且不想为额外的最后一位精度包含十几个额外的数字,请尝试使用str()而不是repr()打印数字:


我认为“十三点三”实际上是用十进制写成的“13.3”!:)在任何语言中,如果您使用货币进行计算,您应该始终使用定点十进制,而不是浮点二进制。根据具体的会计规则,货币计算必须准确无误。以5.01/2美元为例。您可能需要应用规则“始终向下取整”,即$2.50,或规则“如果小于0.005,则向下取整,否则向上取整”,即$2.51。在进行一连串计算时,您可能需要在每一步后舍入到便士,或者直到最后一步才舍入。请参阅的第一个答案。重复:
>>> 52+121.2 
173.19999999999999
>>> str(52+121.2)
'173.2'