Я столкнулся с проблемой точности с дважды в.NET, я думал, что это только относилось к плаваниям, но теперь я вижу, что дважды плавание.
double test = 278.97 - 90.46;
Debug.WriteLine(test) //188.51000000000005
//correct answer is 188.51
Что корректный путь состоит в том, чтобы обработать это? Вокруг? Сократить ненужные десятичные разряды?
Используйте десятичный тип данных. "Тип значений Decimal подходит для финансовых вычислений, требующих большого количества значащих целых и дробных цифр и отсутствия ошибок округления."
Это происходит на многих языках и происходит из-за того, что мы обычно не можем хранить двойные или плавающие числа именно в цифровом оборудовании. Подробное объяснение того, как часто хранятся числа типа double, float и все другие значения с плавающей запятой, можно найти в различных спецификациях IEEE, описанных в Википедии. Например: http://en.wikipedia.org/wiki/Double_precision
Конечно, есть и другие форматы, такие как формат с фиксированной точкой. Но эта неточность присутствует в большинстве языков, и почему вам часто нужно использовать тесты epsilon вместо тестов на равенство при использовании чисел типа double в условных выражениях (например, abs (x - y) <= 0,0001 вместо x == y).
Как вы справитесь с этой неточностью, зависит от вас и зависит от вашего приложения.