Ошибка округления Python и Linux

Столкнулся со странным поведением округления на 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. Как с этим бороться? И нужно ли?


Ответы (0 шт):