C# — математический раунд

Я пытаюсь понять, как округлить до ближайшей десятой позиции с С#. Например, у меня есть значение типа double. Этот двойник в настоящее время установлен на 10,75. Однако мне нужно округлить, а затем обрезать все после десятых позиций. В этом случае я ищу значение 10,8. Как округлить до десятых в С#?

Спасибо!


person Villager    schedule 05.10.2009    source источник
comment
Поскольку вы, очевидно, знаете о math.round, похоже, что он у вас почему-то не работает. Можете ли вы показать, что вы пробовали, и объяснить, чем это отличается от того, что вы ожидали?   -  person Joel Coehoorn    schedule 05.10.2009


Ответы (5)


Math.Round(yourNumber, 1)

Второй параметр — количество знаков после запятой для округления. В вашем случае вы хотите получить 1 десятичный знак в качестве конечного результата.

person Roatin Marth    schedule 05.10.2009

Вам просто нужно использовать перегрузку Math.Round, которая принимает параметр decimals.

Math.Round(10.75, 1) // returns 10.8

Просто для сравнения:

Math.Round(10.75)    // returns 11
Math.Round(10.75, 0) // returns 11
Math.Round(10.75, 2) // returns 10.75
person Noldorin    schedule 05.10.2009

Поскольку вы использовали Math.Round() в своем заголовке, я предполагаю, что вы уже пробовали базовый подход Math.Round(10.75,1), и он возвращает что-то, чего вы не ожидаете. Имея это в виду, я предлагаю рассмотреть некоторые из различных перегрузок функции, в частности ту, которая принимает перечисление MidPointRounding:

http://msdn.microsoft.com/en-us/library/f5898377.aspx

person Joel Coehoorn    schedule 05.10.2009
comment
Очень странное поведение по умолчанию не является стандартным математическим поведением - person Juan Pablo Gomez; 05.09.2018
comment
Стандартное поведение Math на самом деле довольно сильно зависит от контекста для этого. - person Joel Coehoorn; 05.09.2018

Вам действительно нужно округлить его, или вы можете просто отформатировать его для печати, но позволить самой переменной сохранять свою точность? Что-то типа:

decimal value = 10.75;
value.ToString ("#.#");
person Bill the Lizard    schedule 05.10.2009

Если вы просто хотите «вырезать» все после первого десятичного знака, это должно работать:

   return Math.Round(value * 10)/10
person Toto    schedule 05.10.2009