2011-12-29 2 views
12

Как бы вы округлить до десятичное или поплавок на целое число. Например ...Десятичный/от двойного до целого - округленный (не только до ближайшего)

0.0 => 0 
0.1 => 1 
1.1 => 2 
1.7 => 2 
2.1 => 3 

Etc.

+3

Какое поведение вы хотите для отрицательных чисел? делает -1.1 перейти к -1 (перейти к большему) или -2 (перейти дальше от нуля)? –

ответ

40

Простой, используйте Math.Ceiling:

var wholeNumber = (int)Math.Ceiling(fractionalNumber); 
+0

Я знаю, что это не по теме, но могу ли я спросить вас, почему вы использовали 'var', а не' int'? – ken2k

+3

Чисто по привычке. 'var' может быть полезна при объявлении объектов более длинного типа, например' var myDictionary = new Dictionary >() 'например. –

+0

Хорошо, спасибо за ответ! – ken2k

5

Что-то вроде этого?

int myInt = (int)Math.Ceiling(myDecimal); 
+0

Зачем конвертировать в строку только для синтаксического анализа? Просто брось. –

+0

Это, конечно, лучше. Отредактировал свой ответ сейчас. –

0

Math.Ceiling не работает для меня, я использую этот код и эту работу :)

int MyRoundedNumber= (int) MyDecimalNumber; 
       if (Convert.ToInt32(MyDecimalNumber.ToString().Split('.')[1]) != 0) 
        MyRoundedNumber++; 

и если вы хотите, чтобы закруглить отрицательное число вниз, например круглой -1.1 до -2 использования это

int MyRoundedNumber= (int) MyDecimalNumber; 
        if (Convert.ToInt32(MyDecimalNumber.ToString().Split('.')[1]) != 0) 
         if(MyRoundedNumber>=0) 
          MyRoundedNumber++; 
         else 
          MyRoundedNumber--; 
-2
var d = 1.5m; 
var i = (int)Math.Ceiling(d); 
Console.Write(i); 
+0

Это просто * раунды * число, это не обязательно вокруг него ** вверх **. – radoh

0

Прежде чем сказать, что не работает, вы должны проверить, что все значения в операции имеют двойной тип. Вот пример в C#:

int speed= Convert.ToInt32(Math.Ceiling((double)distance/ (double)time)); 
Смежные вопросы