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'