2015-09-15 6 views
0

Нам нужно округлить как этотКак округлить до ближайшего числа между 0-1

0.15 => 0.5 
0.5 => 0.5 
1 => 1 
152 => 1 
1538 => 1 
25000 => 1 

Как этого добиться? Это то, что я пытался

decimal number = 10; 
decimal rounded = Math.Ceiling(number/10000 * 20)/20; 

Это не работает, как ожидалось, если номер 100000 или больше, потому что даст мне 10 в результате

+2

Почему «0.15 => 0,5'? Почему бы не «0.15 => 0.15'? –

ответ

0

Я предполагаю, что это должно быть 0,15 => 0,5 , как сказал Дмитрий. В этом случае, вы можете сделать это:

private double RoundIt(double value) 
{ 
    if (value <= 0) 
     return 0; 
    if (value >= 1) 
     return 1; 
    return value; 
} 
2

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

public static Double Clamp(Double n) { 
    return n > 1.0 ? 1.0 : n < 0 ? 0 : n; 
} 

Однако. в этом случае первая проба будет

0.15 => 0.15 

как вопрос государства «... до ближайшего числа между 0..1».

Edit: расширенная версия Clamp может быть что-то вроде этого:

public static Double Clamp(Double value, Double min, Double max) { 
    //TODO: you may want to check here if min > max 

    return value > max ? max : value < min ? min : value; 
} 

public static Double Clamp(Double value) { 
    return Clamp(value, 0.0, 1.0); 
} 

если вы настаивать на 0.15 => 0.5 это может быть так, что вы на самом деле хотите

Clamp(value, 0.5, 1.0); // [0.5..1], not [0..1] 
+1

Эта функция более известна как «зажим». – leppie

+0

@leppie: Спасибо! Я отредактировал ответ. –

+0

Если вы вызываете свою функцию 'clamp', я ожидаю, что она примет значения' min' и 'max' –

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