2013-06-11 7 views
-2

Я хочу знать, как я мог бы округлить до ближайшего 100, когда значение усечено. я использовал это:Округление до ближайшего усеченного 100

private static int CalculatePaperLevel(int paperLevel) 
{ 
    int roundedLevel = 0; 
    roundedLevel = ((int)Math.Round(paperLevel/10.0) * 10); 
    return roundedLevel; 
} 

, но это, что я хочу

Е.Г. 191 -> 100

224 -> 200

140 -> 100

295 -> 200

+0

http://stackoverflow.com/q/15028144/62576 –

ответ

9

Вы можете просто сделать roundedLevel = (paperLevel/100) * 100;

Это работает потому, что целочисленная арифметика всегда обрезает результаты к целым числам. Так

  • (295/100) -> 2
  • 2 * 100 -> 200
2

Усечение как это то, что происходит, когда вы делите два int с в C#. Этот код делает то, что вы хотите:

private static int CalculatePaperLevel(int paperLevel) 
{ 
    int roundedLevel = paperLevel/100 * 100; 
    return roundedLevel; 
} 
+0

Спасибо. Я не совсем понял, что такое «усечение», и это имеет смысл. – user2476322

1

Я считаю, что функция, которую вы хотите, называется Math.Floor.

0

Просто используйте Math.Floor (37D/100)*100

+2

Аргумент '37/100' имеет тип' int'. Зачем использовать функцию floor на 'int'? –

+0

@Jeppe Он будет обрабатываться как десятичный, так как Floor принимает только десятичные значения и double – Christian

+0

. Деление вернет 'int', поскольку перегрузка, которую можно описать как' int operator/(int, int) '(определяется C# spec, необязательно настоящий метод .NET), безусловно, является лучшей перегрузкой '/' здесь. Тогда перегрузка 'Floor' для использования будет трудно выбрать. Скомпилирует ли это? _Edit: _ Ах, вы изменили его. –

Смежные вопросы