дважды минус двойные проблемы точности предоставления

Я столкнулся с проблемой точности с дважды в.NET, я думал, что это только относилось к плаваниям, но теперь я вижу, что дважды плавание.

double test = 278.97 - 90.46;
Debug.WriteLine(test) //188.51000000000005

//correct answer is 188.51

Что корректный путь состоит в том, чтобы обработать это? Вокруг? Сократить ненужные десятичные разряды?

8
задан BartoszKP 9 September 2017 в 20:20
поделиться

2 ответа

Используйте десятичный тип данных. "Тип значений Decimal подходит для финансовых вычислений, требующих большого количества значащих целых и дробных цифр и отсутствия ошибок округления."

10
ответ дан 5 December 2019 в 11:23
поделиться

Это происходит на многих языках и происходит из-за того, что мы обычно не можем хранить двойные или плавающие числа именно в цифровом оборудовании. Подробное объяснение того, как часто хранятся числа типа double, float и все другие значения с плавающей запятой, можно найти в различных спецификациях IEEE, описанных в Википедии. Например: http://en.wikipedia.org/wiki/Double_precision

Конечно, есть и другие форматы, такие как формат с фиксированной точкой. Но эта неточность присутствует в большинстве языков, и почему вам часто нужно использовать тесты epsilon вместо тестов на равенство при использовании чисел типа double в условных выражениях (например, abs (x - y) <= 0,0001 вместо x == y).

Как вы справитесь с этой неточностью, зависит от вас и зависит от вашего приложения.

5
ответ дан 5 December 2019 в 11:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: