2013-11-19 7 views
0

Math.Round() всегда будет возвращать результаты в соответствии с правилами математики.Настройка Math.Round() приводит к C#

Для примера 0,124 будут округлены до 0,12 если это делается для 2 места десятичной.

Могу ли я сделать это, чтобы всегда дать мне следующий более высокое значение, например 0,124 округляется до 2-х мест десятичной должны дать 0,13 и таким же образом?

+1

http://stackoverflow.com/questions/11794579/c-sharp-round-to-decimals-always-up –

+0

Лучший дубликат, чем у меня – Liam

ответ

1

Попробуйте это:

var input = 0.124; 
var decimals = 2; 
var r = (input == Math.Round(input, decimals)) ? 
    Math.Round(input, decimals) : 
    Math.Round(input + Math.Pow(10, -decimals), decimals); 

Вы можете создать метод расширения:

public static double RoundUp(this double input, int decimals) 
{ 
    return (input == Math.Round(input, decimals)) ? 
     Math.Round(input, decimals) : 
     Math.Round(input + Math.Pow(10, -decimals), decimals); 
} 

и использовать его как :

double input = 0.1224; 
var decimals = 3; 
var r = input.RoundUp(decimals); 
0

Я думаю, вы должны взглянуть на Math.Ceiling() метод:

http://msdn.microsoft.com/en-us/library/zx4t0t48(v=vs.110).aspx

Посмотрите на этот пост на SO, где объясняется, как использовать его:

How to round a decimal up?

+0

Это только округляет до целых чисел, не правда ли? да, это может помочь, но это не совсем полный ответ. Тем более, что это не намного больше, чем ответ на ссылку. – Chris

1

Вы может использовать Math.Ceiling, как упоминается Baszz. Вам нужно умножать и делить на какой-то фактор, чтобы имитировать поведение округления:

var decimals = 2; 
var fac = Math.Pow(10, decimals); 
var result = ((int)Math.Ceiling(0.124 * fac))/fac; 

Console.WriteLine(result); 
0

fo r это, вы пытаетесь math.ceiling() вместо использования math.round() ..!

 Math.Round() --> Rounding values 
     Math.Ceiling() --> Next higher value 
     Math.Floor() --> Next lower value 
0

Вот, например, для Math.Ceiling() концепция

using System; 

    class Program 
     { 
     static void Main() 
     { 
    // Get ceiling of double value. 
     double value1 = 123.456; 
     double ceiling1 = Math.Ceiling(value1); 

    // Get ceiling of decimal value. 
     decimal value2 = 456.789M; 
     decimal ceiling2 = Math.Ceiling(value2); 

    // Get ceiling of negative value. 
     double value3 = -100.5; 
     double ceiling3 = Math.Ceiling(value3); 

    // Write values. 
     Console.WriteLine(value1); 
     Console.WriteLine(ceiling1); 
     Console.WriteLine(value2); 
     Console.WriteLine(ceiling2); 
     Console.WriteLine(value3); 
     Console.WriteLine(ceiling3); 
     } 
    } 

Output 
****** 

123.456 
124 
456.789 
457 
-100.5 
-100 
Смежные вопросы