.NET 4.x Double с точностью после запятой, но БЕЗ округления - C#

Узнай цену своей работы

Формулировка задачи:

Надо выполнить некоторые вычисления с точностью после запятой, но из-за округления при использовании Math.Round() ответ выходит не верным. Как это решается?
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
Да, можно сам ответ округлить вниз, но при увеличении x погрешность когда-то достигнет 1 и костыль сломается. Был еще вариант c помощью String.Format() и double.Parse(), но этот велосипед все равно округляет до большей сотой.

Решение задачи: «.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));
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.125 из 5
Похожие ответы