JayantaChatterjee Ответов: 4

Как округлить десятичное значение после .50 в C#?


Я хочу округлить десятичное значение вот так
если 5.50 => 5
если 5.51 => 6 ..
Я хочу, чтобы если десятичное значение после точки геттера больше .50, то значение увеличивается на 1.
Я использовал математику.Функция Round (), но она круглая после десятичного значения .49..

Philippe Mori

Использование нестандартного округления кажется подозрительным...

4 Ответов

Рейтинг:
32

Mitchell J.

Используйте пользовательскую систему округления:

public int Round(double value)
{
    double decimalpoints = Math.Abs(value - Math.Floor(value));
    if (decimalpoints > 0.5)
        return (int)Math.Round(value);
    else
        return (int)Math.Floor(value);
}


Надеюсь, это поможет. :-)


JayantaChatterjee

Большое спасибо, сэр..

Рейтинг:
28

CHill60

public int myRound(double val)
{
    return (int)Math.Floor(val + .49);
}

Мне не нравятся "магические числа", поэтому вы можете определить const double и поменять его на 0.49


JayantaChatterjee

Я думаю, что это более эффективно, чем предыдущие ответы...
- Спасибо, Сэр....
Большое спасибо...:-)

Philippe Mori

Но он не будет делать то же самое для .495!

CHill60

Я думаю, что ваш комментарий означает, что он не будет работать для таких значений, как 5.501, например. Верно, хорошо сказано. Решение состоит в том, чтобы использовать 0.499 в качестве магического числа или столько 9, сколько вы подозреваете, что у вас будут цифры после десятичной точки. Несимпатичный.
Хотя ОП заявил, что нашел мое решение более эффективным, решение 3 является лучшим ответом и работает независимо от мантиссы.

kurt minds

используйте функцию форматирования. пример Convert. toDouble(Format(5.4, "N0")) и он вернет 6

CHill60

Это не то, что хотел ОП, и включает в себя ненужное преобразование в строку. Мне также не нравятся функции преобразования

Рейтинг:
2

boogac

основной и простой способ, вы можете преобразовать decimal (5.50) в int (5), и вы можете проверить, что 5.50-5 больше или меньше .50, если больше, то применить свой алгоритм..но я не знаю, что какая-либо другая функция делает это автоматически.


JayantaChatterjee

как получить значения после точки (.)?

boogac

десятичное число yourDecimal=5.50;
int temp = (int)yourDecimal;/ / или Convert.toInt32 (..) 5.50 будет 5
decimal pointAfterDecimal= yourDecimal - (decimal)temp;

Рейтинг:
1

Hrushikesh_phapale

пробовать,
Строка.Формат ("{0: 0}", _decimal_value);

надеюсь, это сработает для вас.