Рейтинг:
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;