0
Я использую десятичный модуль в python и вижу некоторое довольно странное поведение при преобразовании строк.Python String to Decimal Conversion - Weird results
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.dec = 0.
orig = 0.01 dec = 0.0100000000000000002
orig = 0.047025 dec = 0.0470249999999999974
Возможно еще относительно округление Десятичные, кажется, также производит странные результаты
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 = -10028392.3750000000000000000 rep = -10028392.3750000000000000000
orig = -10028392.3800000008195638657 rep = -10028392.3699999991804361343
Это Безразлично» Кажется правильным. Что я делаю не так?
Вы знаете, что число с плавающей точкой не является точным с самого начала, не так ли? https://stackoverflow.com/questions/2100490/floating-point-inaccuracy-examples – skyline75489
и неточно вы имеете в виду? – debugoz
Существует много статей о точности чисел с плавающей запятой, включая https://docs.python.org/2/tutorial/floatingpoint.html из документов python. Из-за того, что число с плавающей точкой хранится в памяти, реальное сохраненное значение числа с плавающей точкой является лишь приближением к исходной десятичной дроби и, следовательно, неточно. – skyline75489