Столкнулся со странным поведением округления на Python.
n = 12345
for i in range(2,9):
k = n/10**i
f = '%%0.%sf'%(i-1)
s = f%k
err = ''
if s[-1] == '4':
err = '<---- why rounding result ends with 4'
print('format', f, 'of', k, 'is', s , err)
format %0.1f of 123.45 is 123.5
format %0.2f of 12.345 is 12.35
format %0.3f of 1.2345 is 1.234 <---- why rounding result ends with 4
format %0.4f of 0.12345 is 0.1235
format %0.5f of 0.012345 is 0.01235
format %0.6f of 0.0012345 is 0..001234 <---- why rounding result ends with 4
format %0.7f of 0.00012345 is 0.0001234 <---- why rounding result ends with 4
Ошибка повторяется и, например, в командной строке линукса
echo 0.0012345 | awk '{printf("%0.6f", $s)}'
0.001234
Скорее проблема в точности вещественных чисел, но уж больно число обычное 12345. Как с этим бороться? И нужно ли?
1.2345действительно не хватает точности и оно на самом деле равно1.2344999999999999307220832633902318775653839111328125(аналогичная ситуация с0.0012345и0.00012345) – andreymal Sep 20 '22 at 10:36123.45на самом деле равно123.4500000000000028421709430404007434844970703125– andreymal Sep 20 '22 at 10:38