| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Странная арифметика при работе с float |
| Автор: Agafon 11.4.2010, 14:14 | ||
Есть код:
diff должен быть равен 0.056, но он становится равен 0.0559999943. Почему так происходит? что сделать чтоб считалось точно? |
| Автор: VictorTsaregorodtsev 11.4.2010, 14:45 |
| Потому Потому что формат представления плавучих данных в компе такой. Чтобы считалось точно - или переходите на символьную арифметику (библиотеки классов для этого должны быть), или при выводе результатов на печать/экран используйте спецификаторы формата (наличествующие, например, у обычного сишного принтфа) для округления результата до меньшего числа цифр после запятой. |
| Автор: jorikdima 12.4.2010, 09:35 | ||
Никто никому ничего не должен. Ответ получился в соответствии с точностью предсталения данных в формате float. Не устраивает точность? Используйте double. |
| Автор: Agafon 12.4.2010, 16:09 |
| jorikdima, точность меня не устраивает не из-за количества знаков после запятой, а из-за того, что я получаю немного не то значение, которое хотелось бы. Прежде чем давать советы вникните в суть проблемы. А такие философские изречения как: "Никто никому ничего не должен." не дадут мне ответ. И кстати с double такая же ситуация как и с float. VictorTsaregorodtsev, спасибо большое! Я обошелся простым округлением Math.Round. |
| Автор: jorikdima 13.4.2010, 09:00 |
| jorikdima, точность меня не устраивает не из-за количества знаков после запятой, а из-за того, что я получаю немного не то значение, которое хотелось бы. Это и называется точностью. И кстати с double такая же ситуация как и с float. Приведите пожалуйста код с double. |