.NET 4.x Double с точностью после запятой, но БЕЗ округления - C#
Формулировка задачи:
Надо выполнить некоторые вычисления с точностью после запятой, но из-за округления при использовании Math.Round() ответ выходит не верным. Как это решается?
Да, можно сам ответ округлить вниз, но при увеличении x погрешность когда-то достигнет 1 и костыль сломается.
Был еще вариант c помощью String.Format() и double.Parse(), но этот велосипед все равно округляет до большей сотой.
double x = 1.75; double y = x * 0.05; //0.087500000000000008 double z = x * 0.1; //0.17500000000000002 y = Math.Round(y, 2); //0.09, а должно быть 0.08 z = Math.Round(z, 2); //0.18, а должно быть 0.17 MessageBox.Show((x + y + z).ToString()); //2.02, а должно быть 2
Решение задачи: «.NET 4.x Double с точностью после запятой, но БЕЗ округления»
textual
Листинг программы
static double myRound(double x, int precision) { return ((int)(x * Math.Pow(10.0, precision)) / Math.Pow(10.0, precision)); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д