C # में निकटतम पूर्ण संख्या में गोल कैसे करें


92

मैं निकटतम पूर्णांक के लिए मानों को कैसे गोल कर सकता हूं?

उदाहरण के लिए:

1.1 => 1
1.5 => 2
1.9 => 2

"Math.Ceiling ()" मेरी मदद नहीं कर रहा है। कोई विचार?


मैथ.राउंड () ट्रिक कर सकते हैं।
केवल बोलिवियन हियर

जवाबों:


200

अधिक के लिए आधिकारिक दस्तावेज देखें । उदाहरण के लिए:

मूल रूप से आप Math.Roundविधि को तीन पैरामीटर देते हैं।

  1. वह मान जिसे आप गोल करना चाहते हैं।
  2. मूल्य के बाद आप कितना दशमलव रखना चाहते हैं।
  3. एक वैकल्पिक पैरामीटर जिसे आप AwayFromZero गोलाई का उपयोग करने के लिए आमंत्रित कर सकते हैं। ( जब तक गोलाई अस्पष्ट न हो, उदाहरण के लिए 1.5 पर ध्यान नहीं दिया गया )

नमूना कोड:

var roundedA = Math.Round(1.1, 0); // Output: 1
var roundedB = Math.Round(1.5, 0, MidpointRounding.AwayFromZero); // Output: 2
var roundedC = Math.Round(1.9, 0); // Output: 2
var roundedD = Math.Round(2.5, 0); // Output: 2
var roundedE = Math.Round(2.5, 0, MidpointRounding.AwayFromZero); // Output: 3
var roundedF = Math.Round(3.49, 0, MidpointRounding.AwayFromZero); // Output: 3

लाइव डेमो

आप की जरूरत है MidpointRounding.AwayFromZeroअगर आप चाहते हैं एक .5 मूल्य को गिरफ्तार किया जाना है। दुर्भाग्य से यह डिफ़ॉल्ट व्यवहार नहीं है Math.Round()। यदि MidpointRounding.ToEven(डिफ़ॉल्ट) का उपयोग करते हुए मान को निकटतम सम संख्या 1.5में गोल किया जाता है ( पर गोल किया जाता है 2, लेकिन 2.5इसे भी गोल किया जाता है 2)।


14
दूसरी ओर, उपयोग करने away from zeroका मतलब यह भी है कि -1.5यह गोल होगा -2
डावोगोटलैंड

2
Math.Ceiling का उपयोग करें, इसका उपयोग करने के लिए एक अच्छा अभ्यास नहीं है। घर्षण के लिए Math.Round, पढ़ें: stackoverflow.com/questions/9221205/… ,
Yakir Manor

3
मुझे पता चल रहा है कि Math.Round (1.5, 0) रिटर्न 2
डेविड Sykes

@davogotland उनका वैसे भी 137.5 से 140 के पार नहीं 138 है? मेरा मतलब है निकटतम दसवीं तक गोलाई?
sam

1
@sam शायद 10 से विभाजित होता है, फिर Math.Ceiling के साथ गोल होता है, और अंत में 10 से कई गुणा अधिक होता है?
डेवोग्लोटलैंड

63
Math.Ceiling

हमेशा गोल (छत की ओर)

Math.Floor

हमेशा नीचे की ओर (मंजिल की ओर)

आप के बाद क्या है बस है

Math.Round

जो इस पोस्ट के अनुसार गोल है


वैसे भी उनकी संख्या 137.5 से 140 नहीं 138 है? मेरा मतलब है निकटतम दसवीं तक गोलाई?
सैम

7

आपको चाहिए Math.Round, नहीं Math.CeilingCeilingहमेशा "राउंड" ऊपर, जबकि Roundदशमलव बिंदु के बाद मूल्य के आधार पर ऊपर या नीचे गोल।


6

यह मैनुअल है, और थोड़े प्यारे तरीके से भी:

double d1 = 1.1;
double d2 = 1.5;
double d3 = 1.9;

int i1 = (int)(d1 + 0.5);
int i2 = (int)(d2 + 0.5);
int i3 = (int)(d3 + 0.5);

बस किसी भी संख्या में 0.5 जोड़ें, और इसे इंट (या इसे फर्श) पर डाल दें और इसे गणितीय रूप से सही ढंग से गोल किया जाएगा: डी


यह अभी भी संदिग्ध लग रहा है। सबसे पहले, प्रश्न गोलाई के बारे में पूछता है अप और दूसरी, जब मैं 2. करने के लिए अभी-अभी यह कोशिश की, गणित.गोल (1.5) राउंड के डिफ़ॉल्ट कार्यान्वयन तो यह नहीं हो सकता है कि वह क्या करना चाहता था।
ver

इसके अलावा, आपका उदाहरण दशमलव बिंदु को दशमलव अल्पविराम से मिलाता है। आप सामान्य रूप से (स्वीडन में, मेरे हिसाब से) कौन सा उपयोग करते हैं? :)
ver

उफ़… ओह हाँ, सॉरी। प्रोग्रामिंग में दशमलव बिंदु बेशक, लेकिन औपचारिक पाठ में हम दशमलव अल्पविराम का उपयोग करते हैं। और हाँ, इस प्रश्न के बारे में ^ ^, और "राउंडिंग अप" भाग को स्वेन करें: मुझे लगता है कि यह सिर्फ कुछ भाषा की गलती है। ऑप द्वारा दिए गए उदाहरणों में, कुछ दशमलव संख्याएं गोल हो जाती हैं।
डेवोगोटलैंड

@ मैं मैथ के साथ राउंड डाउन नहीं करता हूं। मैं इसे एक कास्ट के साथ करता हूं। यही कारण है कि इस तरह से मैनुअल और थोड़े प्यारा है;)
davogotland

5

आप Math.Round का उपयोग कर सकते हैं क्योंकि अन्य लोगों ने सुझाव दिया है (अनुशंसित), या आप 0.5 जोड़ सकते हैं और एक इंट में डाल सकते हैं (जो दशमलव भाग को छोड़ देगा)।

double value = 1.1;
int roundedValue = (int)(value + 0.5); // equals 1

double value2 = 1.5;
int roundedValue2 = (int)(value2 + 0.5); // equals 2

5

याद दिलाने हेतु। दोहरे के लिए सावधान।

Math.Round(0.3 / 0.2 ) result in 1, because in double 0.3 / 0.2 = 1.49999999
Math.Round( 1.5 ) = 2

3

आपके पास Math.Round फ़ंक्शन है जो वास्तव में आप चाहते हैं।

Math.Round(1.1) results with 1
Math.Round(1.8) will result with 2.... and so one.

1
1.5मूल्य के बारे में क्या ? आपको अधिक मापदंडों की आवश्यकता है।
केवल बोलिवियन हियर

2

यह निकटतम 5 तक गोल होगा या नहीं बदलेगा यदि यह पहले से ही 5 से विभाज्य है

public static double R(double x)
{
    // markup to nearest 5
    return (((int)(x / 5)) * 5) + ((x % 5) > 0 ? 5 : 0);
}

2

मैं इसके लिए देख रहा था, लेकिन मेरा उदाहरण 4.2769 के रूप में एक संख्या लेना था, और इसे केवल 4.3 की अवधि में छोड़ देना था। बिल्कुल वैसा ही नहीं, लेकिन अगर इससे मदद मिलती है:

Model.Statistics.AverageReview   <= it's just a double from the model

फिर:

@Model.Statistics.AverageReview.ToString("n1")   <=gives me 4.3
@Model.Statistics.AverageReview.ToString("n2")   <=gives me 4.28

आदि...


मैं आपकी विधि का उपयोग कर रहा हूं क्योंकि मुझे भी एक स्ट्रिंग की आवश्यकता है और .ToString ("n0") मेरे लिए गोलाई का ध्यान रखता है: 1.5m.ToString ("n0") // रिटर्न "2"
नाथन Prather



0

यदि आपका फ़्लोटिंग पॉइंट संख्याओं के बजाय पूर्णांक के साथ काम कर रहा है, तो यहां तरीका है।

#define ROUNDED_FRACTION(numr,denr) ((numr/denr)+(((numr%denr)<(denr/2))?0:1))

यहाँ "numr" और "denr" दोनों अहस्ताक्षरित पूर्णांक हैं।


0

Math.Round(number)निकटतम पूर्ण संख्या में राउंड का उपयोग करना ।


0

अपनी खुद की गोल विधि लिखें। कुछ इस तरह,

function round(x) rx = Math.ceil(x) if (rx - x <= .000001) return int(rx) else return int(x) end


-1
decimal RoundTotal = Total - (int)Total;
if ((double)RoundTotal <= .50)
   Total = (int)Total;
else
   Total = (int)Total + 1;
lblTotal.Text = Total.ToString();
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.