Обойти проблему округления с плавающей запятой - PullRequest
0 голосов
/ 04 июня 2018

Df.round () возвращает разочаровывающие результаты.

В следующем примере я пытаюсь округлить десятичную до пяти цифр.Каждый десятичный знак имеет 5 в шестой десятичной позиции.Когда я округляю, я ожидаю округления до пятого десятичного значения.Такое случается только иногда ..

df2 = pd.DataFrame([0.703125, 0.831215])
df2
Out[4]: 
          0
0  0.703125
1  0.831215
df2.round(5)
Out[5]: 
         0
0  0.70312
1  0.83122

После некоторого поиска в Google кажется, что проблема связана с тем, как числа с плавающей запятой представляются компьютером .Какой практический способ обойти эту проблему?

1 Ответ

0 голосов
/ 04 июня 2018

Вы говорите: «Я ожидаю округления пятого десятичного значения».Хорошо, но при каких обстоятельствах?Учитывая, что входные данные вашего примера имеют только 6 значащих цифр, а число с плавающей точкой Python (64-разрядное) поддерживает около 15 цифр, вы можете безопасно добавить небольшую сумму, чтобы получить желаемое поведение:

(df2 + 1e-12).round(5)

Это дает:

         0
0  0.70313
1  0.83122

Предполагается, что наибольшее значение в df2 меньше 1000 или около того, а наименьшее значение меньше, чем приблизительно 1e-6, при условии 6 сигфигов.Добавление небольшого количества гарантирует, что все конечные «5» округляются в большую сторону, при условии, что ваши входные данные находятся в некотором известном диапазоне, где небольшое добавление не сделает результаты неверными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...