В основном вы даете Math.Roundметоду три параметра.
Значение, которое нужно округлить.
Количество десятичных знаков, которое вы хотите оставить после значения.
Необязательный параметр, который можно вызвать для использования округления AwayFromZero. ( игнорируется, если округление не является неоднозначным, например 1,5 )
Вам нужно, MidpointRounding.AwayFromZeroесли вы хотите округлить значение 0,5. К сожалению, это не поведение по умолчанию для Math.Round(). При использовании MidpointRounding.ToEven(по умолчанию) значение округляется до ближайшего четного числа ( 1.5округляется до 2, но 2.5также округляется до 2).
их так или иначе округлить до 137,5 до 140, а не до 138? Я имею в виду округление до ближайшей десятой?
sam
7
Вам нужно Math.Round, не Math.Ceiling. Ceilingвсегда «округляет» в Roundбольшую сторону , в то время как округляет в большую или меньшую сторону в зависимости от значения после десятичной точки.
Это все еще выглядит подозрительно. Во - первых, вопрос касается округлением до и во- вторых, когда я попробовал это только сейчас, реализацию по умолчанию Math.Round (1.5) раундов до 2. Таким образом , это не может быть то , что он хотел.
ver
Кроме того, в вашем примере десятичная точка смешивается с десятичной запятой. Какой из них вы обычно используете (я думаю, в Швеции)? :)
ver
упс ... о да, извините. в программировании десятичная точка, конечно, но в формальном тексте мы используем десятичную запятую. и да, Швеция ^^ по поводу вопроса и части "округления": я думаю, что это просто языковая ошибка. в примерах, данных op, некоторые десятичные числа округляются в меньшую сторону.
davogotland
@ver я не округляю с помощью Math.Round, я делаю это с помощью гипса. вот почему этот способ ручной и довольно симпатичный;)
davogotland
5
Вы можете использовать Math.Round, как предлагали другие (рекомендуется), или вы можете добавить 0,5 и привести к int (что приведет к удалению десятичной части).
Я искал это, но мой пример заключался в том, чтобы взять число, такое как 4,2769, и поместить его в промежуток как просто 4,3. Не совсем то же самое, но если это поможет:
Model.Statistics.AverageReview<= it's just a double from the model
Затем:
@Model.Statistics.AverageReview.ToString("n1")<=gives me 4.3@Model.Statistics.AverageReview.ToString("n2")<=gives me 4.28
Я использую этот ваш метод, потому что мне также нужна строка, и .ToString ("n0") позаботится об округлении для меня: 1.5m.ToString ("n0") // возвращает "2"
Ответы:
См. Дополнительную информацию в официальной документации . Например:
В основном вы даете
Math.Round
методу три параметра.Образец кода:
Живая демонстрация
Вам нужно,
MidpointRounding.AwayFromZero
если вы хотите округлить значение 0,5. К сожалению, это не поведение по умолчанию дляMath.Round()
. При использованииMidpointRounding.ToEven
(по умолчанию) значение округляется до ближайшего четного числа (1.5
округляется до2
, но2.5
также округляется до2
).источник
away from zero
также означает-1.5
округление до-2
.всегда округляется вверх (к потолку)
всегда округляется вниз (к полу)
то, что вам нужно, это просто
какие раунды согласно этому сообщению
источник
Вам нужно
Math.Round
, неMath.Ceiling
.Ceiling
всегда «округляет» вRound
большую сторону , в то время как округляет в большую или меньшую сторону в зависимости от значения после десятичной точки.источник
есть это руководство, и тоже довольно мило:
просто добавьте 0,5 к любому числу и преобразуйте его в int (или превратите его в пол), и оно будет математически правильно округлено: D
источник
Вы можете использовать Math.Round, как предлагали другие (рекомендуется), или вы можете добавить 0,5 и привести к int (что приведет к удалению десятичной части).
источник
Просто напоминание. Остерегайтесь двойного.
источник
У вас есть функция Math.Round, которая делает именно то, что вы хотите.
источник
1.5
как насчет стоимости? Вам нужно больше параметров.это будет округлено до ближайшего 5 или не изменится, если оно уже делится на 5
источник
Я искал это, но мой пример заключался в том, чтобы взять число, такое как 4,2769, и поместить его в промежуток как просто 4,3. Не совсем то же самое, но если это поможет:
Затем:
и т.д...
источник
Использование
Math.Round
:источник
Это даст результат:
источник
Если вы работаете с целыми числами, а не с числами с плавающей запятой, вот способ.
Здесь и «numr», и «denr» являются целыми числами без знака.
источник
Использование
Math.Round(number)
округления до ближайшего целого числа.источник
Напишите свой собственный метод раунда. Что-то вроде,
function round(x) rx = Math.ceil(x) if (rx - x <= .000001) return int(rx) else return int(x) end
источник
источник