как убедиться, что целочисленная часть неизменна, когда вокруг float32 с пандами - PullRequest
0 голосов
/ 17 января 2019

вот мой код

df = pd.DataFrame([110100.0], dtype=np.float32)
df.round(7)

результат:

110099.992188

я ожидаю 110100.0.

Как убедиться, что операция округления влияет только на десятичную часть, а целая часть осталась неизменной

, например: input => ожидаемый результат

1.0 => 1.0

1.12345678 => 1.1234567

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Используйте круглую функцию Python и дайте точность EG:

a = 1.112346789
round(a, 6)
1.112347

round(a, 1)
1.1
0 голосов
/ 17 января 2019

Вы можете использовать numpy.modf для экстрактов с плавающей точкой до fractional и integral частей и только для округления fractional части, последнее добавление вместе:

df = pd.DataFrame([110100.0, 1.0, 1.12345678], dtype=np.float32, columns=['col'])

a, b = np.modf(df['col'])
print (b + np.round(a, 7))
0    110100.000000
1         1.000000
2         1.123457
Name: col, dtype: float32

Другим решением является умножение на число для округления, преобразование в целое число и деление:

val = 10**7
print (df['col'].mul(val).astype(np.int64).div(val))
0    110100.000000
1         1.000000
2         1.123457
Name: col, dtype: float64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...