Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Странная арифметика при работе с float


Автор: Agafon 11.4.2010, 14:14
Есть код:

Код

float oldQty = 1.256F;
float NewQty = 1.2F;
float diff = oldQty - NewQty; 


diff должен быть равен 0.056, но он становится равен 0.0559999943.
Почему так происходит? что сделать чтоб считалось точно?

Автор: VictorTsaregorodtsev 11.4.2010, 14:45
Потому smile 
Потому что формат представления плавучих данных в компе такой.
Чтобы считалось точно - или переходите на символьную арифметику (библиотеки классов для этого должны быть), или при выводе результатов на печать/экран используйте спецификаторы формата (наличествующие, например, у обычного сишного принтфа) для округления результата до меньшего числа цифр после запятой.

Автор: jorikdima 12.4.2010, 09:35
Цитата(Agafon @ 11.4.2010,  14:14)
diff должен быть равен 0.056, но он становится равен 0.0559999943.
Почему так происходит? что сделать чтоб считалось точно?

Никто никому ничего не должен. Ответ получился в соответствии с точностью предсталения данных в формате float. Не устраивает точность? Используйте double.

Автор: Agafon 12.4.2010, 16:09
jorikdima, точность меня не устраивает не из-за количества знаков после запятой, а из-за того, что я получаю немного не то значение, которое хотелось бы. Прежде чем давать советы вникните в суть проблемы. А такие философские изречения как: "Никто никому ничего не должен." не дадут мне ответ. И кстати с double такая же ситуация как и с float. 


VictorTsaregorodtsev, спасибо большое! Я обошелся простым округлением Math.Round. 

Автор: jorikdima 13.4.2010, 09:00
jorikdima, точность меня не устраивает не из-за количества знаков после запятой, а из-за того, что я получаю немного не то значение, которое хотелось бы.

Это и называется точностью.

И кстати с double такая же ситуация как и с float. 

Приведите пожалуйста код с double.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)