উত্তর:
decimalVar.ToString ("#.##"); // returns "" when decimalVar == 0
অথবা
decimalVar.ToString ("0.##"); // returns "0" when decimalVar == 0
Decimal
এবং Double
টাইপ ToString
পদ্ধতি ফর্ম্যাট করার পক্ষে যুক্তি গ্রহণ করে। আপনার মানটি দশমিক / ডাবল রূপান্তর করার চেষ্টা করুন।
আমি জানি এটি একটি পুরানো প্রশ্ন, তবে আমি অবাক হয়ে দেখেছি যে উত্তরটি কেউ পোস্ট করেনি বলে মনে হয়;
এটি আমি ব্যবহার করব:
decimal.Round(yourValue, 2, MidpointRounding.AwayFromZero);
decimalVar.ToString("F");
এটা হবে:
23.456
→23.46
23
→ 23.00
; 12.5
→12.50
মুদ্রা প্রদর্শনের জন্য আদর্শ।
টোস্ট্রিংয়ের ("এফ") ডকুমেন্টেশন দেখুন ( জন স্নাইডারকে ধন্যবাদ)।
.
সম্ভবত প্রতিস্থাপন করা হবে ,
। CultureInfo.InvariantCulture
এটি অক্ষম করার জন্য আপনার দ্বিতীয় তর্ক হিসাবে পাস করা উচিত ।
আপনার যদি কেবল ডিসপ্লে ব্যবহারের স্ট্রিংয়ের জন্য এটির প্রয়োজন হয় For ফর্ম্যাট
String.Format("{0:0.00}", 123.4567m); // "123.46"
http://www.csharp-examples.net/string-format-double/
"মি" দশমিক প্রত্যয়। দশমিক প্রত্যয় সম্পর্কে:
প্রদত্ত দশমিক D = 12,345; এক্সপ্রেশন d.ToString ( "সি") বা String.Format ( "{0: সি}", ঘ) উত্পাদ $ 12,35 - দয়া করে মনে রাখবেন প্রতীক সহ বর্তমান সংস্কৃতি এর মুদ্রা সেটিংসের ব্যবহার করা হয়।
নোট করুন যে "সি" বর্তমান সংস্কৃতি থেকে সংখ্যা সংখ্যা ব্যবহার করে। C{Precision specifier}
পছন্দ মতো প্রয়োজনীয় নির্ভুলতার জন্য আপনি সর্বদা ডিফল্টকে ওভাররাইড করতে পারেন String.Format("{0:C2}", 5.123d)
।
আপনি যদি এটি কমা দ্বারা ফর্ম্যাট করার পাশাপাশি দশমিক পয়েন্ট (তবে কোনও মুদ্রার চিহ্ন নয়) যেমন 3,456,789.12 ...
decimalVar.ToString("n2");
ইতিমধ্যে দুটি উচ্চ স্কোরিং উত্তর রয়েছে যা ডেসিমালকে বোঝায় R রাউন্ড (...) তবে আমি মনে করি আরও কিছুটা ব্যাখ্যা দরকার - কারণ ডেসিমালের একটি অপ্রত্যাশিত গুরুত্বপূর্ণ সম্পত্তি রয়েছে যা সুস্পষ্ট নয়।
একটি দশমিক 'জানে' কত দশমিক স্থান এটি কোথায় থেকে এসেছে তার উপর ভিত্তি করে।
উদাহরণস্বরূপ নিম্নলিখিতগুলি অপ্রত্যাশিত হতে পারে:
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"
অথবা এক্সএএমএল-এ আপনি কেবল ব্যবহার করেন {Binding Price, StringFormat=c}
এক্সেসএমএলকে অ্যামাজনের ওয়েব সার্ভিসে প্রেরণ করার সময় আমি যেখানে দশমিক দশমিক একটি প্রয়োজন সেখানে গিয়েছিলাম। পরিষেবাটি অভিযোগ করছিল কারণ একটি দশমিক মান (মূলত এসকিউএল সার্ভার থেকে প্রাপ্ত) হিসাবে প্রেরণ 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
।
বিভিন্ন ফর্ম্যাটগুলি দেখানোর জন্য এখানে একটি সামান্য লিনকপ্যাড প্রোগ্রাম রয়েছে:
void Main()
{
FormatDecimal(2345.94742M);
FormatDecimal(43M);
FormatDecimal(0M);
FormatDecimal(0.007M);
}
public void FormatDecimal(decimal val)
{
Console.WriteLine("ToString: {0}", val);
Console.WriteLine("c: {0:c}", val);
Console.WriteLine("0.00: {0:0.00}", val);
Console.WriteLine("0.##: {0:0.##}", val);
Console.WriteLine("===================");
}
ফলাফল এখানে:
ToString: 2345.94742
c: $2,345.95
0.00: 2345.95
0.##: 2345.95
===================
ToString: 43
c: $43.00
0.00: 43.00
0.##: 43
===================
ToString: 0
c: $0.00
0.00: 0.00
0.##: 0
===================
ToString: 0.007
c: $0.01
0.00: 0.01
0.##: 0.01
===================
মানটি 0 হলে খুব কমই আপনি একটি খালি স্ট্রিং চাইবেন।
decimal test = 5.00;
test.ToString("0.00"); //"5.00"
decimal? test2 = 5.05;
test2.ToString("0.00"); //"5.05"
decimal? test3 = 0;
test3.ToString("0.00"); //"0.00"
শীর্ষ রেট করা উত্তরটি ভুল এবং 10 মিনিটের (বেশিরভাগ) লোকের সময় নষ্ট করেছে।
"#"
সংখ্যার সংখ্যার অর্থ (প্রয়োজনে) (প্রয়োজন না হলে প্যাডিং ছাড়া) "0"
অর্থ সংখ্যার অঙ্ক (কোনও ম্যাটার কী না) (যদি পাওয়া না যায় তবে জিরো দিয়ে প্যাড করা)
মাইট এম। এর উত্তর .NET এ আমার জন্য উপযুক্ত, কিন্তু। নেট কোর decimal.Round
লেখার সময় কোনও পদ্ধতি নেই।
নেট কোরটিতে আমাকে ব্যবহার করতে হয়েছিল:
decimal roundedValue = Math.Round(rawNumber, 2, MidpointRounding.AwayFromZero);
স্ট্রিংয়ে রূপান্তর সহ একটি হ্যাকি পদ্ধতিটি হ'ল:
public string FormatTo2Dp(decimal myNumber)
{
// Use schoolboy rounding, not bankers.
myNumber = Math.Round(myNumber, 2, MidpointRounding.AwayFromZero);
return string.Format("{0:0.00}", myNumber);
}
এগুলির কোনওটিই আমার প্রয়োজন ঠিক ঠিক করেনি, 2 ডিপি জোর করে এবং হিসাবে তৈরি করে0.005 -> 0.01
আমাদের কমপক্ষে 2 পিপি রয়েছে তা নিশ্চিত করতে 2 ডিপি জোর করে যথাযথতা 2 ডিপি বাড়িয়ে নেওয়া দরকার
তারপরে আমাদের ২ ডিপি-র বেশি নেই তা নিশ্চিত করার জন্য গোল করে
Math.Round(exactResult * 1.00m, 2, MidpointRounding.AwayFromZero)
6.665m.ToString() -> "6.67"
6.6m.ToString() -> "6.60"
শীর্ষ রেট করা উত্তর দশমিক মানের স্ট্রিং উপস্থাপনের ফর্ম্যাট করার জন্য একটি পদ্ধতি বর্ণনা করে এবং এটি কাজ করে।
তবে, আপনি যদি প্রকৃত মানটিতে সংরক্ষিত যথার্থতাটি পরিবর্তন করতে চান তবে আপনাকে নীচের মতো কিছু লিখতে হবে:
public static class PrecisionHelper
{
public static decimal TwoDecimalPlaces(this decimal value)
{
// These first lines eliminate all digits past two places.
var timesHundred = (int) (value * 100);
var removeZeroes = timesHundred / 100m;
// In this implementation, I don't want to alter the underlying
// value. As such, if it needs greater precision to stay unaltered,
// I return it.
if (removeZeroes != value)
return value;
// Addition and subtraction can reliably change precision.
// For two decimal values A and B, (A + B) will have at least as
// many digits past the decimal point as A or B.
return removeZeroes + 0.01m - 0.01m;
}
}
ইউনিট পরীক্ষার একটি উদাহরণ:
[Test]
public void PrecisionExampleUnitTest()
{
decimal a = 500m;
decimal b = 99.99m;
decimal c = 123.4m;
decimal d = 10101.1000000m;
decimal e = 908.7650m
Assert.That(a.TwoDecimalPlaces().ToString(CultureInfo.InvariantCulture),
Is.EqualTo("500.00"));
Assert.That(b.TwoDecimalPlaces().ToString(CultureInfo.InvariantCulture),
Is.EqualTo("99.99"));
Assert.That(c.TwoDecimalPlaces().ToString(CultureInfo.InvariantCulture),
Is.EqualTo("123.40"));
Assert.That(d.TwoDecimalPlaces().ToString(CultureInfo.InvariantCulture),
Is.EqualTo("10101.10"));
// In this particular implementation, values that can't be expressed in
// two decimal places are unaltered, so this remains as-is.
Assert.That(e.TwoDecimalPlaces().ToString(CultureInfo.InvariantCulture),
Is.EqualTo("908.7650"));
}
যে কোনও প্রয়োজনীয় বিন্যাসে একটি সংখ্যা ফর্ম্যাট করতে আপনি system.globalization ব্যবহার করতে পারেন।
উদাহরণ স্বরূপ:
system.globalization.cultureinfo ci = new system.globalization.cultureinfo("en-ca");
আপনার যদি একটি থাকে decimal d = 1.2300000
এবং আপনার এটি 2 দশমিক স্থানে ছাঁটাতে হবে তবে এটি এটিকে d.Tostring("F2",ci);
এমনভাবে মুদ্রণ করা যেতে পারে যেখানে F2 স্ট্রিংটি 2 দশমিক স্থানে থাকে এবং সিআই হ'ল লোকেল বা সংস্কৃতিফর্ম।
আরও তথ্যের জন্য এই লিঙ্কটি পরীক্ষা করুন
http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx
https://msdn.microsoft.com/en-us/library/dwhawy9k%28v=vs.110%29.aspx
এই লিঙ্কটি কীভাবে আপনি আপনার সমস্যা পরিচালনা করতে পারেন এবং আপনি আরও শিখতে চাইলে আপনি কী করতে পারেন সে সম্পর্কে বিশদ ব্যাখ্যা করে। সরলতার উদ্দেশ্যে, আপনি যা করতে চান তা হ'ল
double whateverYouWantToChange = whateverYouWantToChange.ToString("F2");
আপনি যদি মুদ্রার জন্য এটি চান তবে আপনি "F2" এর পরিবর্তে "C2" টাইপ করে এটি আরও সহজ করে তুলতে পারেন
Double Amount = 0;
string amount;
amount=string.Format("{0:F2}", Decimal.Parse(Amount.ToString()));
আপনার যদি মাত্র 2 দশমিক স্থান রাখার প্রয়োজন হয় (অর্থাত্ দশমিক অঙ্কের বাকী সমস্ত অংশ কেটে দিন):
decimal val = 3.14789m;
decimal result = Math.Floor(val * 100) / 100; // result = 3.14
আপনার যদি প্রয়োজন হয় মাত্র 3 দশমিক স্থান:
decimal val = 3.14789m;
decimal result = Math.Floor(val * 1000) / 1000; // result = 3.147