.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));
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д