Как работает pandas / numpy round (), когда десятичная дробь> = 1? - PullRequest
1 голос
/ 28 апреля 2019

У меня есть серия панд

In [1]: import pandas as pd
In [2]: s = pd.Series([1.3, 2.6, 1.24, 1.27, 1.45])

, и мне нужно округлить числа.

In [4]: s.round(1)
Out[4]:
0    1.3
1    2.6
2    1.2
3    1.3
4    1.4
dtype: float64

это работает для 1.27, однако 1.45 округляется до 1.4, это проблема потери точности типа с плавающей запятой?Если это так, как я могу решить эту проблему?

Ответы [ 2 ]

2 голосов
/ 28 апреля 2019

Это не ошибка, но потому, что большинство десятичных чисел не могут быть представлены точно как число с плавающей запятой.

https://www.programiz.com/python-programming/methods/built-in/round

другой способ округления:

int(number*10^precission+0.5)

однако вы можете столкнуться с проблемами симуляции, потому что кто знает, будет ли 1.45 ближе к 1.4499999 .. или 1.4500 ... 1

0 голосов
/ 28 апреля 2019

Как правило, round() часто дает сбой из-за неточных оценок чисел с плавающей точкой.

В этом случае, однако, это из-за соглашения, согласно которому половина всех чисел (четных) округляется в меньшую сторону, в порядкечтобы сбалансировать ошибку округления.

Вы можете довольно легко отключить это поведение :

округлить (x [, n]) x округлить до n цифр, округлитьот половины до вечераЕсли n опущено, по умолчанию используется значение 0.

...