2012-08-03 38 views
14

給定小數點'96 .154',我怎樣才能確保它總是四捨五入爲96.16(而不是正常舍入到小數點後兩位,這會給出96.15)。如何將小數加起來?

+0

如何96.154輪高達96.16,而不是向下取整到96.15?這將是很好的詳細說明如何四捨五入應該如何工作 – 2012-08-03 11:14:22

+0

看看這個鏈接http://stackoverflow.com/questions/11740989/rounding-decimal-value/11741129#11741129 – sabz23 2012-08-03 11:15:14

+0

這是實際的小數類型,或雙? – ken2k 2012-08-03 11:18:50

回答

16

類哈克而是一個非常直觀的方式來做到這一點:

var val = 96.154M; 

var result = Math.Ceiling(val * 100)/100.0M; 
+0

不像你說的最理想,但看起來像最好的解決方案 – 2012-08-03 11:50:19

5

我覺得你找Math.Ceiling方法。

您可以將其與乘數相結合,以指定舍入多少個小數位。像這樣,

public float roundUp(float number, int numDecimalPlaces) 
{ 
    double multiplier = Math.Pow(10, numDecimalPlaces)) 

    return Math.ceiling(number*multiplier)/multiplier; 
} 
6

您可以將0.005加上該值,然後舍入結果。

+1

天才,但取決於如果你總是想從零開始,那麼負面呢? – Jodrell 2012-08-03 11:26:24

+0

@Jodrell問題的標題說這一切都「始終」。順便說一句,我贊成關於負數的評論。 – 2012-08-03 11:27:55

+3

當值爲'96.150'時,這將不起作用,因爲它會將它舍入爲'96.16',這是不正確的,因爲它應該是'96.15'。 – Steven 2012-08-03 11:45:12

0

以下是值和基數小數部分的roundUp方法的代碼。你應該用你的問題的基本分數是0.05M。然而,該方法可用於其他常見情況,即基本分數爲0.5M;你可以以有趣的方式應用它,例如使用0.3M的基數部分。嗯,我希望它應該回答你的問題,有樂趣:

static decimal roundUp(decimal aValue, decimal aBaseFraction) 
{ 
    decimal quotient = aValue/aBaseFraction; 
    decimal roundedQuotient = Math.Round(quotient, 0); 
    decimal roundAdjust = 0.0M; 
    if (quotient > roundedQuotient) 
    { 
     roundAdjust = aBaseFraction; 
    } 
    return roundAdjust + roundedQuotient * aBaseFraction; 
} 
0

這裏是我的版本綜述方法,在此可以將特定小數

void Main() 
{ 
    Console.WriteLine(RoundUp(2.8448M, 2)); 
    //RoundUp(2.8448M, 2).Dump(); 
} 

public static decimal RoundUp(decimal numero, int numDecimales) 
{ 
    decimal valorbase = Convert.ToDecimal(Math.Pow(10, numDecimales)); 
    decimal resultado = Decimal.Round(numero * 1.00000000M, numDecimales + 1, MidpointRounding.AwayFromZero) * valorbase; 
    decimal valorResiduo = 10M * (resultado - Decimal.Truncate(resultado)); 

    if (valorResiduo < 5) 
    { 
     return Decimal.Round(numero * 1.00M, numDecimales, MidpointRounding.AwayFromZero); 
    } 
    else 
    { 
     var ajuste = Convert.ToDecimal(Math.Pow(10, -(numDecimales + 1))); 
     numero += ajuste; 
     return Decimal.Round(numero * 1.00000000M, numDecimales, MidpointRounding.AwayFromZero); 
    } 
} 
相關問題