.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));
}

ИИ для рефератов и докладов


  • Экспорт Word по ГОСТу
  • Минимум 80% уникальности текста
  • Поиск релевантных источников в интернете
  • Готовый документ за 2 минуты

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

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