C # में दो दशमलव स्थानों में गोल डबल?


258

मैं सी # में दो दशमलव स्थानों में डबल मूल्य को गोल करना चाहता हूं मैं यह कैसे कर सकता हूं?

double inputValue = 48.485;

राउंड अप के बाद

inputValue = 48.49;

संबंधित: c # - मैं एक दशमलव मान को 2 दशमलव स्थानों पर कैसे करूं (पृष्ठ पर आउटपुट के लिए)


ध्यान दें कि आप डबल का उपयोग करके सभी फ्लोटिंग पॉइंट वैल्यू का प्रतिनिधित्व नहीं कर सकते हैं और यह आपको राउंडिंग के दौरान यात्रा कर
Liam

जवाबों:


479

यह काम:

inputValue = Math.Round(inputValue, 2);

ट्रंक फ्लोट पर वर्कअराउंड: फ्लोट myTruncFloat = float.Parse (Math.Round (myFloat, 2) .ToString ());
पिएरो अल्बर्टो

1
यदि मान 48.0000 है। इसका परिणाम 48.00 नहीं होगा। डबल इनपुटवैल्यू = 48.00; inputValue = Math.Round (inputValue, 2); परिणाम केवल 48 होगा। कोई भी वारैकाउंड?
user1926138

100
Math.Round(inputValue, 2, MidpointRounding.AwayFromZero)

4
यह वास्तव में है जिसका उपयोग किया जाना चाहिए। बैंकों आदि में अधिकांश ऑपरेशन इसी पद्धति (MidpointRounding.AwayFromZero) का उपयोग करके किए जाते हैं।
MadBoy

41
यह सुझाव देते हुए कि बैंक डबल्स का उपयोग डरावना है, मुद्रा के लिए सन्निकटन मूल्यों का उपयोग न करें।
रग्गी

6
@raggi मैं कुछ (बैंकों) से डरता हूँ ... जो बहुत कुछ समझाता है
SparK

4
हां, मेरा मानना ​​है कि यह फिल्म 'ऑफिस स्पेस' के बाद बनी थी - जिसमें कुछ भी नोटिस नहीं किया गया था। अच्छी तरह से सावधान रहें कि कब मनमाने ढंग से गोलाई का उपयोग किया जाए।
atconway

1
और बहुत पहले मूल सुपरमैन फिल्मों में से एक के कथानक के हिस्से के रूप में।
जेम्स वेस्टगेट

25

आपको उपयोग करना चाहिए

inputvalue=Math.Round(inputValue, 2, MidpointRounding.AwayFromZero)

गणित.गोल

Math.Round भिन्न अंक की एक निर्दिष्ट संख्या के लिए एक डबल-सटीक फ़्लोटिंग-पॉइंट मान को गोल करता है।

MidpointRounding

निर्दिष्ट करता है कि गणितीय राउंडिंग विधियों को एक संख्या को कैसे संसाधित करना चाहिए जो दो नंबरों के बीच में है।

मूल रूप से ऊपर का फ़ंक्शन आपके इनपुट लेवल को लेगा और इसे 2 (या आपके द्वारा निर्दिष्ट संख्या) दशमलव स्थानों पर राउंड करेगा। साथ MidpointRounding.AwayFromZeroएक नंबर दो अन्य लोगों के बीच आधे रास्ते है, यह की ओर गोल है निकटतम संख्या शून्य से है कि दूर। एक अन्य विकल्प भी है जो आप उस राउंड को निकटतम सम संख्या की ओर उपयोग कर सकते हैं


25

एक और आसान तरीका एक पैरामीटर के साथ ToString का उपयोग करना है। उदाहरण:

float d = 54.9700F;    
string s = d.ToString("N2");
Console.WriteLine(s);

परिणाम:

54.97

19

Math.Round का उपयोग करें

value = Math.Round(48.485, 2);

मुझे इसे मारो (हालांकि मैं वहां पर एक अर्ध-उपनिवेश भी जोड़
दूंगा

1
हालाँकि, मिडपॉइंट राउंडिंग के साथ सावधान रहें: "यदि अंक दशमलव स्थिति के दाईं ओर मूल्य के पहले अंक का मान 5 है, तो अंकों की स्थिति में अंकों को गोल किया जाता है यदि यह विषम है, या अपरिवर्तित छोड़ दिया गया है, तो यह भी है"
मथियास

8

आप नीचे से एक कोशिश कर सकते हैं। इसके लिए कई तरीके हैं।

1. 
 value=Math.Round(123.4567, 2, MidpointRounding.AwayFromZero) //"123.46"
2.
 inputvalue=Math.Round(123.4567, 2)  //"123.46"
3. 
 String.Format("{0:0.00}", 123.4567);      // "123.46"
4. 
string.Format("{0:F2}", 123.456789);     //123.46
string.Format("{0:F3}", 123.456789);     //123.457
string.Format("{0:F4}", 123.456789);     //123.4568

मैंने चौथा विकल्प इस्तेमाल किया। F6 लिखना मेरे लिए 6 शून्य नीचे लिखने से बेहतर है
;;

2

एक प्रक्षेपित स्ट्रिंग का उपयोग करें, यह एक गोलाकार स्ट्रिंग उत्पन्न करता है:

var strlen = 6;
$"{48.485:F2}"

उत्पादन

"48.49"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.