@Nahs

Округление чисел. Что я делаю не так?

Python 3.4
Имею вот такой код:
f2 = round(f, 3)
buffer = 0.001
if f2 < buffer: 
      r = {'f=':f,'round(f,3)=':f2,'buffer=':buffer}


С него имею такой результат:
{'f=': 3.564236791125941e-09, 'buffer=': 0.001, 'round(f,3)=': 0.0}
{'f=': 1.3266317874845862e-06, 'buffer=': 0.001, 'round(f,3)=': 0.0}
{'f=': 1.9855396039131223e-08, 'buffer=': 0.001, 'round(f,3)=': 0.0}
{'f=': 6.35513772582379e-06, 'buffer=': 0.001, 'round(f,3)=': 0.0}
{'f=': 1.7587640969915497e-06, 'buffer=': 0.001, 'round(f,3)=': 0.0}
{'f=': 2.832111881297117e-06, 'buffer=': 0.001, 'round(f,3)=': 0.0}
{'f=': 2.5486645882828902e-05, 'buffer=': 0.001, 'round(f,3)=': 0.0}
{'f=': 8.51481378687756e-06, 'buffer=': 0.001, 'round(f,3)=': 0.0}
{'f=': 3.240056853934595e-07, 'buffer=': 0.001, 'round(f,3)=': 0.0}
{'f=': 2.5071613169100337e-06, 'buffer=': 0.001, 'round(f,3)=': 0.0}
{'f=': 4.280439648979284e-07, 'buffer=': 0.001, 'round(f,3)=': 0.0}
{'f=': 4.778466944528603e-07, 'buffer=': 0.001, 'round(f,3)=': 0.0}
{'f=': 2.841350227730452e-06, 'buffer=': 0.001, 'round(f,3)=': 0.0}
{'f=': 4.24937996249021e-05, 'buffer=': 0.001, 'round(f,3)=': 0.0}


Именно так и выводит, не смотря на условие if
Если приписать
else: 
   r = 0

то, выводит нули

Объясните пожалуйста, каким образом округление до третьего знака переводит f в f2?
Что делаю не так и как сделать правильно?
  • Вопрос задан
  • 292 просмотра
Решения вопроса 1
>>> Decimal(0.0005)
Out[23]: Decimal('0.0005000000000000000104083408558608425664715468883514404296875')
>>> Decimal('0.0005')
Out[24]: Decimal('0.0005')
>>> round(Decimal('0.0005'), 3)
Out[25]: Decimal('0.000')
>>> round(Decimal(0.0005), 3)
Out[26]: Decimal('0.001')
>>> round(Decimal(0.0006), 3)
Out[27]: Decimal('0.001')
>>> round(Decimal(0.0004), 3)
Out[28]: Decimal('0.000')

Если число <= 0.0005 оно будет округлено в сторону 0
иначе в сторону 0,001 (само собой речь идёт о числах меньше 0.001, именно по ним у вас вопросы)
Тут сразу учтите, что Decimal(0.0005) != Decimal('0.0005')

P.S. asvetlov.blogspot.ru/2012/08/numerics.html
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы