2008-12-01 25 views
31

संभव डुप्लिकेट का दौर समाप्त नहीं:
c# - How do I round a decimal value to 2 decimal places (for output on a page)काटना दशमलव संख्या

मैं नीचे

यानी

  • 2,22939393 तरह दशमलव काटना चाहते हैं -> 2.229
  • २.२,२९,७७,७७७ -> 2,229
+0

संबंधित प्रश्न: http://stackoverflow.com/questions/304011/truncate-a-decimal-value-in-c – strager

+1

मुझे विश्वास है कि गधा घुसपैठ निर्देश .trn यह भी आपके लिए यह करेगा। –

+4

डुप्लिकेट प्रश्न बिना छेड़छाड़ के गोल करने के बारे में कुछ भी नहीं कहता है। इसी तरह, इस प्रश्न के प्रमुख पहलुओं (गोल न करें) को "डुप्लिकेट" द्वारा सही ढंग से उत्तर नहीं दिया जाता है। फिर से खोलने के लिए मतदान। – psubsee2003

उत्तर

14
double d = 2.22977777; 
d = ((double) ((int) (d * 1000.0)))/1000.0 ; 
बेशक

, यह काम नहीं होगा यदि आप काट-छांट की कोशिश कर रहे गोलाकार त्रुटि, लेकिन यह आपके उदाहरणों में दिए गए मानों के साथ ठीक काम करना चाहिए। this question पर पहले दो उत्तरों को देखें कि यह कभी-कभी क्यों काम नहीं करेगा।

+2

वाह सब कुछ सिर्फ एक छोटा करने के लिए। –

+0

यह बहुत कुछ दिखता है, लेकिन यह स्ट्रिंग में कनवर्ट करने से बहुत कम काम कर रहा है। :) –

+0

यह भी एक और सही तरीका है। –

55

आप Math.Round उपयोग कर सकते हैं:

decimal rounded = Math.Round(2.22939393, 3); //Returns 2.229 

या आप N3 numeric format साथ ToString उपयोग कर सकते हैं।

string roundedNumber = number.ToString("N3"); 

संपादित करें: आप पूर्णांकन नहीं करना चाहती के बाद से, आप आसानी से Math.Truncate उपयोग कर सकते हैं:

Math.Truncate(2.22977777 * 1000)/1000; //Returns 2.229 
+1

दूसरे उदाहरण के साथ काम नहीं करता है। मैं बस इसे छोटा कर देना चाहता हूं - गोल नहीं किया गया। –

+4

मैथ के लिए +1। TRuncate – Peter

+1

बस दोहराने के लिए: Math.Runcate के लिए +1, Math के लिए -1। राउंड, जो पूछे गए प्रश्न को हल नहीं करता है। –

0

आउटपुट आप किस प्रारूप को चाहते हैं?

आप एक स्ट्रिंग के साथ खुश हैं उसके बाद निम्न सी # कोड पर विचार करें:

double num = 3.12345; 
num.ToString("G3"); 

परिणाम होगा "3.12"।

यदि आप .NET का उपयोग कर रहे हैं तो यह लिंक उपयोग का उपयोग हो सकता है। http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx

मुझे उम्मीद है कि मदद करता है .... लेकिन जब तक आप उस भाषा की तुलना नहीं करते हैं जिसका आप उपयोग कर रहे हैं और जिस प्रारूप में आप आउटपुट चाहते हैं, उचित समाधान का सुझाव देना मुश्किल है।

+1

यह ओपी की मदद नहीं करता है क्योंकि यह छंटनी के बजाए अंकों को गोल करता है। साथ ही, 'जी' प्रारूप के लिए सटीक विनिर्देश अंक की कुल संख्या के लिए है, न केवल दशमलव वाले (जो कि "एफ" करता है) – sinelaw

-2

इस प्रयास करें:

decimal original = GetSomeDecimal(); // 22222.22939393 
int number1 = (int)original; // contains only integer value of origina number 
decimal temporary = original - number1; // contains only decimal value of original number 
int decimalPlaces = GetDecimalPlaces(); // 3 
temporary *= (Math.Pow(10, decimalPlaces)); // moves some decimal places to integer 
temporary = (int)temporary; // removes all decimal places 
temporary /= (Math.Pow(10, decimalPlaces)); // moves integer back to decimal places 
decimal result = original + temporary; // add integer and decimal places together 

यह कम लिखा जा सकता है, लेकिन यह अधिक वर्णनात्मक है।

संपादित करें: लघु रास्ता:

decimal original = GetSomeDecimal(); // 22222.22939393 
int decimalPlaces = GetDecimalPlaces(); // 3 
decimal result = ((int)original) + (((int)(original * Math.Pow(10, decimalPlaces))/(Math.Pow(10, decimalPlaces)); 
+0

हो सकता है क्योंकि यह संकलित नहीं होता है। आप किस भाषा में विकास कर रहे थे? मैंने अभी सी # में यह कोशिश की है और मुझे एक डबल से दशमलव गुणा करने की कोशिश करने में त्रुटि मिलती है। –

0

हो सकता है कि एक और त्वरित समाधान हो सकता है:

>>> float("%.1f" % 1.00001) 
1.0 
>>> float("%.3f" % 1.23001) 
1.23 
>>> float("%.5f" % 1.23001) 
1.23001 
-3

सब कुछ भूल जाओ सिर्फ इस

double num = 2.22939393; 
num = Convert.ToDouble(num.ToString("#0.000")); 
+1

यह गलत है। मूल पोस्ट छंटनी की तलाश में है। यह दौर होगा। 2.2296 का परिणाम 2.23 होगा। –

8

एक समारोह की जाँच एक काटना मनमानी संख्याओं की संख्या:

public decimal Truncate(decimal number, int digits) 
{ 
    decimal stepper = (decimal)(Math.Pow(10.0, (double)digits)); 
    int temp = (int)(stepper * number); 
    return (decimal)temp/stepper; 
} 
+1

यह 'System.OverflowException के साथ बड़ी संख्या में विफल रहता है: मान इंट 32 के लिए या तो बहुत बड़ा या बहुत छोटा था – sinelaw

7

यहां एक विस्तार विधि है जो पूर्णांक ओवरफ़्लो से पीड़ित नहीं है (जैसे उपर्युक्त उत्तरों में से कुछ)। यह दक्षता के लिए 10 की कुछ शक्तियों को भी कैश करता है।

static double[] pow10 = { 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10 }; 
public static double Truncate(this double x, int precision) 
{ 
    if (precision < 0) 
     throw new ArgumentException(); 
    if (precision == 0) 
     return Math.Truncate(x); 
    double m = precision >= pow10.Length ? Math.Pow(10, precision) : pow10[precision]; 
    return Math.Truncate(x * m)/m; 
} 
0

प्रयास करें इस

double d = 2.22912312515; 
int demention = 3; 
double truncate = Math.Truncate(d) + Math.Truncate((d - Math.Truncate(d)) * Math.Pow(10.0, demention))/Math.Pow(10.0, demention); 
2

यह ऊपर TcKs सुझाव के समान है, लेकिन पूर्णांक रूपांतरण

वीबी बजाय math.truncate का उपयोग कर: लेकिन आप विचार

Private Function TruncateToDecimalPlace(byval ToTruncate as decimal, byval DecimalPlaces as integer) as double 
dim power as decimal = Math.Pow(10, decimalplaces) 
return math.truncate(totruncate * power)/power 
end function 
मिलेगा
संबंधित मुद्दे