पहले से ही दो उच्च स्कोरिंग उत्तर हैं जो Decimal.Round (...) को संदर्भित करते हैं, लेकिन मुझे लगता है कि थोड़ा और स्पष्टीकरण की आवश्यकता है - क्योंकि दशमलव का एक अप्रत्याशित महत्वपूर्ण गुण है जो स्पष्ट नहीं है।
एक दशमलव 'जानता है' कि यह कहाँ से आया है, कितने दशमलव स्थानों पर आधारित है।
उदाहरण के लिए निम्नलिखित अप्रत्याशित हो सकता है:
Decimal.Parse("25").ToString() => "25"
Decimal.Parse("25.").ToString() => "25"
Decimal.Parse("25.0").ToString() => "25.0"
Decimal.Parse("25.0000").ToString() => "25.0000"
25m.ToString() => "25"
25.000m.ToString() => "25.000"
उसी ऑपरेशन को करने से उपरोक्त में से प्रत्येक के लिए Doubleकोई दशमलव स्थान ( "25") नहीं होगा ।
जब आप 2 दशमलव स्थानों के लिए दशमलव चाहते हैं, तो 95% संभावना होती है क्योंकि यह ऐसी मुद्रा है जिसमें यह संभव है कि यह 95% समय के लिए ठीक हो:
Decimal.Parse("25.0").ToString("c") => "$25.00"
या XAML में आप सिर्फ इस्तेमाल करते हैं {Binding Price, StringFormat=c}
एक मामले में मैं भाग गया जहाँ मुझे एक दशमलव की आवश्यकता थी एक एक्सएमएल जब अमेज़ॅन के webservice को एक्सएमएल भेज रहा था। सेवा शिकायत कर रही थी क्योंकि एक दशमलव मान (मूल रूप से SQL सर्वर से) भेजा जा रहा था 25.1200और अस्वीकार कर दिया 25.12गया था , ( अपेक्षित प्रारूप था)।
Decimal.Round(...)समस्या को ठीक करने के लिए मुझे 2 दशमलव स्थानों के साथ करने की आवश्यकता थी ।
// This is an XML message - with generated code by XSD.exe
StandardPrice = new OverrideCurrencyAmount()
{
TypedValue = Decimal.Round(product.StandardPrice, 2),
currency = "USD"
}
TypedValueप्रकार की है, Decimalइसलिए मैं बस नहीं कर सकता ToString("N2")और इसे गोल करने और इसे एक के रूप में रखने की आवश्यकता थी decimal।