संभव डुप्लिकेट का दौर समाप्त नहीं:
c# - How do I round a decimal value to 2 decimal places (for output on a page)काटना दशमलव संख्या
मैं नीचे
यानी
- 2,22939393 तरह दशमलव काटना चाहते हैं -> 2.229
- २.२,२९,७७,७७७ -> 2,229
संभव डुप्लिकेट का दौर समाप्त नहीं:
c# - How do I round a decimal value to 2 decimal places (for output on a page)काटना दशमलव संख्या
मैं नीचे
यानी
double d = 2.22977777;
d = ((double) ((int) (d * 1000.0)))/1000.0 ;
बेशक
, यह काम नहीं होगा यदि आप काट-छांट की कोशिश कर रहे गोलाकार त्रुटि, लेकिन यह आपके उदाहरणों में दिए गए मानों के साथ ठीक काम करना चाहिए। this question पर पहले दो उत्तरों को देखें कि यह कभी-कभी क्यों काम नहीं करेगा।
वाह सब कुछ सिर्फ एक छोटा करने के लिए। –
यह बहुत कुछ दिखता है, लेकिन यह स्ट्रिंग में कनवर्ट करने से बहुत कम काम कर रहा है। :) –
यह भी एक और सही तरीका है। –
आप 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। TRuncate – Peter
बस दोहराने के लिए: Math.Runcate के लिए +1, Math के लिए -1। राउंड, जो पूछे गए प्रश्न को हल नहीं करता है। –
आउटपुट आप किस प्रारूप को चाहते हैं?
आप एक स्ट्रिंग के साथ खुश हैं उसके बाद निम्न सी # कोड पर विचार करें:
double num = 3.12345;
num.ToString("G3");
परिणाम होगा "3.12"।
यदि आप .NET का उपयोग कर रहे हैं तो यह लिंक उपयोग का उपयोग हो सकता है। http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx
मुझे उम्मीद है कि मदद करता है .... लेकिन जब तक आप उस भाषा की तुलना नहीं करते हैं जिसका आप उपयोग कर रहे हैं और जिस प्रारूप में आप आउटपुट चाहते हैं, उचित समाधान का सुझाव देना मुश्किल है।
यह ओपी की मदद नहीं करता है क्योंकि यह छंटनी के बजाए अंकों को गोल करता है। साथ ही, 'जी' प्रारूप के लिए सटीक विनिर्देश अंक की कुल संख्या के लिए है, न केवल दशमलव वाले (जो कि "एफ" करता है) – sinelaw
इस प्रयास करें:
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));
हो सकता है क्योंकि यह संकलित नहीं होता है। आप किस भाषा में विकास कर रहे थे? मैंने अभी सी # में यह कोशिश की है और मुझे एक डबल से दशमलव गुणा करने की कोशिश करने में त्रुटि मिलती है। –
हो सकता है कि एक और त्वरित समाधान हो सकता है:
>>> float("%.1f" % 1.00001)
1.0
>>> float("%.3f" % 1.23001)
1.23
>>> float("%.5f" % 1.23001)
1.23001
सब कुछ भूल जाओ सिर्फ इस
double num = 2.22939393;
num = Convert.ToDouble(num.ToString("#0.000"));
यह गलत है। मूल पोस्ट छंटनी की तलाश में है। यह दौर होगा। 2.2296 का परिणाम 2.23 होगा। –
एक समारोह की जाँच एक काटना मनमानी संख्याओं की संख्या:
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;
}
यह 'System.OverflowException के साथ बड़ी संख्या में विफल रहता है: मान इंट 32 के लिए या तो बहुत बड़ा या बहुत छोटा था – sinelaw
यहां एक विस्तार विधि है जो पूर्णांक ओवरफ़्लो से पीड़ित नहीं है (जैसे उपर्युक्त उत्तरों में से कुछ)। यह दक्षता के लिए 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;
}
प्रयास करें इस
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);
यह ऊपर 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
मिलेगा
संबंधित प्रश्न: http://stackoverflow.com/questions/304011/truncate-a-decimal-value-in-c – strager
मुझे विश्वास है कि गधा घुसपैठ निर्देश .trn यह भी आपके लिए यह करेगा। –
डुप्लिकेट प्रश्न बिना छेड़छाड़ के गोल करने के बारे में कुछ भी नहीं कहता है। इसी तरह, इस प्रश्न के प्रमुख पहलुओं (गोल न करें) को "डुप्लिकेट" द्वारा सही ढंग से उत्तर नहीं दिया जाता है। फिर से खोलने के लिए मतदान। – psubsee2003