Python 2.7 Python字符串到十进制的转换-奇怪的结果
我在python中使用Decimal模块,在转换字符串时看到一些相当奇怪的行为Python 2.7 Python字符串到十进制的转换-奇怪的结果,python-2.7,decimal,Python 2.7,Decimal,我在python中使用Decimal模块,在转换字符串时看到一些相当奇怪的行为 print "orig = %s dec = %.19f" % (rate,Decimal(rate)) 结果: orig = 0.0151 dec = 0.0151000000000000006 orig = 0.00995 dec = 0.0099500000000000005 orig = 0.011075 dec = 0.0110749999999999998 orig = 0.0123 dec = 0.0
print "orig = %s dec = %.19f" % (rate,Decimal(rate))
结果:
orig = 0.0151 dec = 0.0151000000000000006
orig = 0.00995 dec = 0.0099500000000000005
orig = 0.011075 dec = 0.0110749999999999998
orig = 0.0123 dec = 0.0123000000000000002
orig = 0.01 dec = 0.0100000000000000002
orig = 0.047025 dec = 0.0470249999999999974
orig = -10028392.3750000000000000000 rep = -10028392.3750000000000000000
orig = -10028392.3800000008195638657 rep = -10028392.3699999991804361343
也许更多关于小数舍入的问题似乎也会产生奇怪的结果
print "orig = %.19f rep = %.19f" % (originalCashflow,replacementCashflow)
originalCashflow = originalCashflow.quantize(Decimal('1.00'), rounding=ROUND_HALF_UP)
replacementCashflow = replacementCashflow.quantize(Decimal('1.00'), rounding=ROUND_HALF_UP)
print "orig = %.19f rep = %.19f" % (originalCashflow,replacementCashflow)
结果:
orig = 0.0151 dec = 0.0151000000000000006
orig = 0.00995 dec = 0.0099500000000000005
orig = 0.011075 dec = 0.0110749999999999998
orig = 0.0123 dec = 0.0123000000000000002
orig = 0.01 dec = 0.0100000000000000002
orig = 0.047025 dec = 0.0470249999999999974
orig = -10028392.3750000000000000000 rep = -10028392.3750000000000000000
orig = -10028392.3800000008195638657 rep = -10028392.3699999991804361343
这似乎不对。我做错了什么?您没有转换字符串。您正在转换浮动
orig = 0.0151
orig_str = "0.0151"
decimal.Decimal(orig)
输出:
Decimal('0.01510000000000000057454041524351850966922938823699951171875')
Decimal('0.0151')
字符串转换是精确的
decimal.Decimal(orig_str)
输出:
Decimal('0.01510000000000000057454041524351850966922938823699951171875')
Decimal('0.0151')
您知道浮点数从一开始就不准确,对吗?你的意思是不准确吗?有很多关于浮点数准确性的文章,包括python文档中的这篇。由于浮点数是如何存储在内存中的,浮点数的实际存储值只是原始小数的近似值,因此根本不准确。