2012-08-03 15 views
14

दशमलव '96 .154 'को देखते हुए, मैं यह कैसे सुनिश्चित कर सकता हूं कि यह हमेशा 96.16 तक गोल हो जाता है (सामान्य दशमलव के विपरीत 2 दशमलव तक जो 96.15 देगा)।दशमलव को कैसे गोल करें?

+0

करता 96.16 अप करने के लिए 96.154 दौर और नीचे दौर नहीं कैसे 96.15 करने के लिए? गोल करने के लिए विनिर्देशों का विस्तार करना अच्छा होगा –

+0

इस लिंक को देखें http://stackoverflow.com/questions/11740989/rounding-decimal-value/11741129#11741129 – sabz23

+0

क्या यह वास्तविक दशमलव प्रकार है, या डबल? – ken2k

उत्तर

16

hacky का प्रकार लेकिन ऐसा करने के लिए एक बहुत ही सहज तरीके:

var val = 96.154M; 

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

जैसा कि आप कहते हैं सबसे आदर्श नहीं है लेकिन –

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

+0

@ जोडरेल प्रश्न का शीर्षक यह सब "हमेशा ऊपर" कहता है। वैसे, मैंने नकारात्मक संख्याओं के बारे में टिप्पणी को ऊपर उठाया। –

+3

यह तब काम नहीं करेगा जब मान '96.150' है, क्योंकि यह इसे '96.16' तक ले जाएगा, जो गलत है, क्योंकि इसे' 96.15' होना चाहिए। – Steven

0

यहां मूल्य और आधार अंश के लिए एक राउंडअप विधि का कोड है। आपके प्रश्न के लिए उपयोग करने वाले आधार अंश 0.05 एम है। हालांकि विधि का उपयोग अन्य सामान्य परिदृश्यों के लिए किया जा सकता है जो आधार अंश 0.5 एम है; और आप इसे दिलचस्प तरीकों से लागू कर सकते हैं उदाहरण के लिए 0.3 एम के आधार अंश का उपयोग करना। खैर मुझे आशा है कि यह आपके सवालों के जवाब चाहिए, मजा:

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); 
    } 
} 
संबंधित मुद्दे