Мне известно о Python с ошибками с плавающей запятой при использовании обычных типов. Вот почему я использую Панды.Поля Float64 с ошибками с плавающей запятой в Pandas [Python]
я вдруг возникли некоторые проблемы с входными данными I (не расчет) и не может объяснить следующее поведение:
In [600]: df = pd.DataFrame([[0.05], [0.05], [0.05], [0.05]], columns = ['a'])
In [601]: df.dtypes
Out[601]:
a float64
dtype: object
In [602]: df['a'].sum()
Out[602]: 0.20000000000000001
In [603]: df['a'].round(2).sum()
Out[603]: 0.20000000000000001
In [604]: (df['a'] * 1000000).round(0).sum()
Out[604]: 200000.0
In [605]: (df['a'] * 1000000).round(0).sum()/1000000
Out[605]: 0.20000000000000001
Надеюсь кто-нибудь может мне помочь либо исправить или выяснить, как правильно подводить 0,2 (или Я не возражаю, если результат равен 20 или 2000, но, как вы можете видеть, когда я делюсь, я попадаю в ту же точку, где сумма неверна!).
(запустить свой код, не забудьте сделать import pandas as pd
)
Это характер чисел с плавающей запятой. Это просто представление, поэтому вы можете игнорировать его. Почему это проблема для вас? BTW попробуйте это: 'print (0.1 + 0.2)' – MaxU
@MaxU Получаю, что Макс. поэтому я постараюсь решить, если сделать 0.05 * 100 = 5, суммировать эти 4 и получить 20. Но моя проблема заключается в том, что система видит 20.00000..001, и даже округление не похоже на трюк. – Yona
Возможный дубликат [Является ли математика с плавающей запятой?] (Http://stackoverflow.com/questions/588004/is-floating-point-math-broken) –