Вопрос с добавлением плавающей запятой
-
19-09-2019 - |
Вопрос
float totalAmount = 0;
.
.
.//totalAmount assigned value 1.05 correctly
.
totalAmount += float.Parse(dataRow["Amt"].ToString()); //where dataRow["Amt"] has value 4.93
Ответ, который я получаю для totalAmount, равен 5,97999954 вместо 5,98.
Почему это происходит?
Решение
Вы утверждаете, что totalAmount
составляет 1,05, до накопления.Это даст ожидаемые результаты:
1.05
4.93 +
------
5.98
Вы получаете 5,97999954, что, по сути, является ответом, лучше всего представленным IEEE с плавающей запятой, который представляет собой двоичный формат, который не может точно выразить каждое десятичное число.Например, довольно распространенный 0,110 имеет бесконечное двоичное представление с плавающей запятой .0001100110011...
2.
И ссылка на Википедию, на всякий случай: http://en.wikipedia.org/wiki/Floating_point#Accuracy_problems ;)
Другие советы
jdmichal прав, но я добавлю, что если вы действительно хотите, чтобы это складывалось правильно, вы можете использовать тип Decimal (включая десятичные литералы).