উত্তর:
এখানে কয়েকটি উদাহরণ:
decimal a = 1.994444M;
Math.Round(a, 2); //returns 1.99
decimal b = 1.995555M;
Math.Round(b, 2); //returns 2.00
আপনি নিম্নলিখিত ওভারলোডের সাথেও রাউন্ডিং / রাউন্ড-টু-এমনকি ব্যাঙ্কারদের দিকে নজর দিতে চাইতে পারেন:
Math.Round(a, 2, MidpointRounding.ToEven);
এখানে আরও তথ্য আছে ।
0.005
আগে সংখ্যায় যুক্ত করুন। অনুরূপভাবে রাউন্ড ডাউন করতে , ফাংশনে 0.005
যাওয়ার আগে বিয়োগ করুন Math.Round
।
MidPointRounding.ToEven
(ওরফে "ব্যাঙ্কার্স রাউন্ডিং") এর কারণ হ'ল কারণ আমরা সকলেই স্কুলে গোল করতে শিখেছি যেখানে .5 রাউন্ড আপ খুব বেশি রাউন্ডিং ঘটায়। এই একটা সমস্যা যখন টাকা, ট্যাক্স হিসাব, ইত্যাদি সঙ্গে তার আচরণ
ব্যক্তিগতভাবে আমি কখনই কিছু করি না। এটি যথাসম্ভব দৃolute়তা বজায় রাখুন, যেহেতু রাউন্ডিং সিএসে কিছুটা লাল হেরিং। তবে আপনি আপনার ব্যবহারকারীর জন্য ডেটা ফর্ম্যাট করতে চান এবং সেই লক্ষ্যে আমি দেখতে পেলাম যে string.Format("{0:0.00}", number)
এটি একটি ভাল পদ্ধতির।
আপনি যদি একটি স্ট্রিং চান
> (1.7289).ToString("#.##")
"1.73"
বা দশমিক
> Math.Round((Decimal)x, 2)
1.73m
কিন্তু মনে রেখ! রাউন্ডিং বিতরণ করা হয় না, অর্থাত্। round(x*y) != round(x) * round(y)
। সুতরাং গণনার একেবারে শেষ অবধি কোনও বৃত্তাকার কাজ করবেন না, না হলে আপনি যথার্থতা হারাবেন।
সাধারণভাবে গোল করার বিষয়ে উইকিপিডিয়ায় একটি দুর্দান্ত পৃষ্ঠা রয়েছে ।
সমস্ত .NET (পরিচালিত) ভাষা প্রচলিত ভাষা রান টাইমের (সিএলআর) রাউন্ডিং মেকানিজম ব্যবহার করতে পারে। উদাহরণস্বরূপ, ম্যাথ.রাউন্ড () (উপরে উল্লিখিত) পদ্ধতিটি বিকাশকারীকে রাউন্ডিংয়ের ধরণ (রাউন্ড-টু- ইওভেন বা অ্যাও -থেকে-শূন্য) নির্দিষ্ট করতে দেয়। রূপান্তর.টিওআইএনটি 32 () পদ্ধতি এবং এর বিভিন্নতাগুলি রাউন্ড টু- ইভেন ব্যবহার করে । সিলিং () এবং মেঝে () পদ্ধতি সংশ্লিষ্ট হয়।
আপনি কাস্টম সংখ্যার ফর্ম্যাটিংয়ের সাথেও গোল করতে পারেন ।
দ্রষ্টব্য: দশমিক। রাউন্ড () ম্যাথের চেয়ে আলাদা পদ্ধতি ব্যবহার করে ound রাউন্ড ();
ব্যাঙ্কারের গোলাকার অ্যালগরিদমের জন্য এখানে একটি দরকারী পোস্ট টি। বৃত্তাকার সম্পর্কে এখানে রেমন্ডের একটি হাস্যকর পোস্ট দেখুন ...
// দুটি দশমিক স্থানে রূপান্তর
String.Format("{0:0.00}", 140.6767554); // "140.67"
String.Format("{0:0.00}", 140.1); // "140.10"
String.Format("{0:0.00}", 140); // "140.00"
Double d = 140.6767554;
Double dc = Math.Round((Double)d, 2); // 140.67
decimal d = 140.6767554M;
decimal dc = Math.Round(d, 2); // 140.67
=========
// just two decimal places
String.Format("{0:0.##}", 123.4567); // "123.46"
String.Format("{0:0.##}", 123.4); // "123.4"
String.Format("{0:0.##}", 123.0); // "123"
"0" "#" এর সাথেও একত্রিত করতে পারে।
String.Format("{0:0.0#}", 123.4567) // "123.46"
String.Format("{0:0.0#}", 123.4) // "123.4"
String.Format("{0:0.0#}", 123.0) // "123.0"
আমি এটি একটি পুরানো প্রশ্ন জানি কিন্তু দয়া করে গণিত রাউন্ড এবং স্ট্রিং ফর্ম্যাট রাউন্ডের মধ্যে নিম্নলিখিত পার্থক্যগুলির জন্য নোট করুন :
decimal d1 = (decimal)1.125;
Math.Round(d1, 2).Dump(); // returns 1.12
d1.ToString("#.##").Dump(); // returns "1.13"
decimal d2 = (decimal)1.1251;
Math.Round(d2, 2).Dump(); // returns 1.13
d2.ToString("#.##").Dump(); // returns "1.13"
আপনি যদি কোনও সংখ্যার গোল করতে চান তবে আপনি পৃথক ফলাফল অর্জন করতে পারেন: আপনি ম্যাথটি কীভাবে ব্যবহার করেন ound , এবং আপনি মিডপয়েন্ট বৃত্তাকার প্রয়োগ। বিশেষত, এর অভ্যন্তরীণ অপারেশনগুলির সাথে ব্যবহার করার সময় বা ভেরিয়েবলটি বৃত্তাকার থেকে আসে operation ধরা যাক, আপনি এই দুটি সংখ্যাকে গুণ করতে চান: 0.75 * 0.95 = 0.7125 । রাইট? সি # তে নেই
আসুন দেখে নেওয়া যাক আপনি 3 য় দশমিকের দিকে যেতে চান তবে কি হয়:
double result = 0.75d * 0.95d; // result = 0.71249999999999991
double result = 0.75f * 0.95f; // result = 0.71249997615814209
result = Math.Round(result, 3, MidpointRounding.ToEven); // result = 0.712. Ok
result = Math.Round(result, 3, MidpointRounding.AwayFromZero); // result = 0.712. Should be 0.713
যেমন আপনি দেখতে পেলেন, প্রথম রাউন্ডটি () সঠিক হয় যদি আপনি মিডপয়েন্টটি নিচে গোল করতে চান। তবে দ্বিতীয় রাউন্ড () আপনি যদি গোল করতে চান তবে এটি ভুল।
এটি নেতিবাচক সংখ্যাগুলিতে প্রযোজ্য:
double result = -0.75 * 0.95; //result = -0.71249999999999991
result = Math.Round(result, 3, MidpointRounding.ToEven); // result = -0.712. Ok
result = Math.Round(result, 3, MidpointRounding.AwayFromZero); // result = -0.712. Should be -0.713
সুতরাং, আইএমএইচও, আপনার নিজের প্রয়োজন অনুসারে ম্যাথ.রাউন্ড () এর জন্য আপনার নিজের মোড়ক ফাংশন তৈরি করা উচিত। আমি একটি ফাংশন তৈরি করেছি যার মধ্যে, 'roundUp = true' প্যারামিটারটির অর্থ পরবর্তী বৃহত্তর সংখ্যায় গোল হওয়া। এটি: 0.7125 রাউন্ডে 0.713 এবং -0.7125 রাউন্ড থেকে -0.712 (কারণ -0.712> -0.713)। এটি আমি তৈরি করেছি এবং যে কোনও দশমিকের জন্য কাজ করে:
double Redondea(double value, int precision, bool roundUp = true)
{
if ((decimal)value == 0.0m)
return 0.0;
double corrector = 1 / Math.Pow(10, precision + 2);
if ((decimal)value < 0.0m)
{
if (roundUp)
return Math.Round(value, precision, MidpointRounding.ToEven);
else
return Math.Round(value - corrector, precision, MidpointRounding.AwayFromZero);
}
else
{
if (roundUp)
return Math.Round(value + corrector, precision, MidpointRounding.AwayFromZero);
else
return Math.Round(value, precision, MidpointRounding.ToEven);
}
}
ভেরিয়েবল 'সংশোধক' ভাসমান বা দ্বিগুণ সংখ্যার সাথে অপারেটিংয়ের অসম্পূর্ণতা ঠিক করার জন্য।
আপনি যা যা পরীক্ষা করতে চাইতে পারেন তা হ'ল ম্যাথের রাউন্ডিং মেকানিজম ound রাউন্ড:
http://msdn.microsoft.com/en-us/library/system.midpointrounding.aspx
এগুলি বাদে আমি ম্যাথ.রাউন্ড (ইনপুটনামার, নাম্বার অফপ্লেসস) * 100/100 একের ওপরে যোগাযোগ করার পরামর্শ দিচ্ছি কারণ এটি পরিষ্কার।
আপনি ম্যাথ ব্যবহার করে গোল করতে চান এমন সংখ্যাগুলির সংখ্যা নির্দিষ্ট করতে সক্ষম হবেন ound রাউন্ড (আপনার নাম্বার, ২)
আপনি এখানে আরও পড়তে পারেন ।
ম্যাথ.ফ্লুর (123456.646 * 100) / 100 123456.64 এ ফিরে আসবে
স্ট্রিং এ = "10.65678";
দশমিক d = ম্যাথ। রাউন্ড (রূপান্তর করুন। টোডাবল (a.ToString ()), 2)
আমার একটি দশমিক পরিবর্তনশীল যখন একটি অদ্ভুত পরিস্থিতি ছিল 55550 সিরিয়ালাইজ করার সময় এটি সর্বদা গাণিতিকভাবে 55.5 হিসাবে ডিফল্ট মান সেট করে। তবে, আমাদের ক্লায়েন্ট সিস্টেমটি কোনও কারণে 55.50 এর জন্য গুরুতরভাবে প্রত্যাশা করছে এবং তারা অবশ্যই দশমিক প্রত্যাশা করেছিল। আমি যখন নীচের সহায়কটি লিখেছিলাম তখন এটি কোনও স্ট্রিং প্রেরণের পরিবর্তে শূন্যের সাথে যে কোনও দশমিক মান প্যাড করে 2 অঙ্কে রূপান্তর করে।
public static class DecimalExtensions
{
public static decimal WithTwoDecimalPoints(this decimal val)
{
return decimal.Parse(val.ToString("0.00"));
}
}
ব্যবহার হওয়া উচিত
var sampleDecimalValueV1 = 2.5m;
Console.WriteLine(sampleDecimalValueV1.WithTwoDecimalPoints());
decimal sampleDecimalValueV1 = 2;
Console.WriteLine(sampleDecimalValueV1.WithTwoDecimalPoints());
আউটপুট:
2.50
2.00