C # তে দুটি সংখ্যার দশকে আপনি কীভাবে একটি সংখ্যাকে গোল করবেন?


উত্তর:


629

এখানে কয়েকটি উদাহরণ:

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);

এখানে আরও তথ্য আছে


51
আপনার স্পষ্ট করা উচিত যে মিডপয়েন্ট রউন্ডিং oতাই ডিফল্ট। আপনি যদি অ্যাফ্রোমজিরো চান, আপনাকে ওভারলোডটি ব্যবহার করতে হবে
ব্রায়ান ভ্যান্ডার প্ল্যাটস

5
যদি আপনি 2 দশমিক স্থানে গোল করতে চান, তবে গোল করার 0.005আগে সংখ্যায় যুক্ত করুন। অনুরূপভাবে রাউন্ড ডাউন করতে , ফাংশনে 0.005যাওয়ার আগে বিয়োগ করুন Math.Round
ওড়াদ

4
.NET ডিফল্ট MidPointRounding.ToEven(ওরফে "ব্যাঙ্কার্স রাউন্ডিং") এর কারণ হ'ল কারণ আমরা সকলেই স্কুলে গোল করতে শিখেছি যেখানে .5 রাউন্ড আপ খুব বেশি রাউন্ডিং ঘটায়। এই একটা সমস্যা যখন টাকা, ট্যাক্স হিসাব, ইত্যাদি সঙ্গে তার আচরণ
asporter


33

ব্যক্তিগতভাবে আমি কখনই কিছু করি না। এটি যথাসম্ভব দৃolute়তা বজায় রাখুন, যেহেতু রাউন্ডিং সিএসে কিছুটা লাল হেরিং। তবে আপনি আপনার ব্যবহারকারীর জন্য ডেটা ফর্ম্যাট করতে চান এবং সেই লক্ষ্যে আমি দেখতে পেলাম যে string.Format("{0:0.00}", number)এটি একটি ভাল পদ্ধতির।


এটি প্রদর্শনের উদ্দেশ্যে, বিশেষত অর্থের জন্য আরও ভাল কাজ করে, কারণ £ 5.4 (ম্যাথ.াউন্ড সহ) as 5.40 হিসাবে দেখায় না (এইভাবে)।
পিটার গর্ডন

আমি স্ট্রিংয়ের আগে চেষ্টা করেছি For ফর্ম্যাট ("0: 0.00", সংখ্যা), কিন্তু এটি কার্যকর হয়নি। এই বর্গাকার বন্ধনীগুলি খুব গুরুত্বপূর্ণ, সুতরাং: স্ট্রিং.ফর্ম্যাট ("{0: 0.00}", সংখ্যা) কাজ করে।
ফ্রেনকিবি

8
@ ফ্রেঙ্কিবি আপনি যখন 'স্কোয়ার বন্ধনী' বলবেন তখন আমি আশা করি আপনার বন্ধনীগুলি বোঝানো হয়েছে।
গণিত

এই বৃত্তাকার। 1.009 => 1.01
ডনি ভি।

30

আপনি যদি একটি স্ট্রিং চান

> (1.7289).ToString("#.##")
"1.73"

বা দশমিক

> Math.Round((Decimal)x, 2)
1.73m

কিন্তু মনে রেখ! রাউন্ডিং বিতরণ করা হয় না, অর্থাত্‍। round(x*y) != round(x) * round(y)। সুতরাং গণনার একেবারে শেষ অবধি কোনও বৃত্তাকার কাজ করবেন না, না হলে আপনি যথার্থতা হারাবেন।


14

সাধারণভাবে গোল করার বিষয়ে উইকিপিডিয়ায় একটি দুর্দান্ত পৃষ্ঠা রয়েছে

সমস্ত .NET (পরিচালিত) ভাষা প্রচলিত ভাষা রান টাইমের (সিএলআর) রাউন্ডিং মেকানিজম ব্যবহার করতে পারে। উদাহরণস্বরূপ, ম্যাথ.রাউন্ড () (উপরে উল্লিখিত) পদ্ধতিটি বিকাশকারীকে রাউন্ডিংয়ের ধরণ (রাউন্ড-টু- ইওভেন বা অ্যাও -থেকে-শূন্য) নির্দিষ্ট করতে দেয়। রূপান্তর.টিওআইএনটি 32 () পদ্ধতি এবং এর বিভিন্নতাগুলি রাউন্ড টু- ইভেন ব্যবহার করে । সিলিং () এবং মেঝে () পদ্ধতি সংশ্লিষ্ট হয়।

আপনি কাস্টম সংখ্যার ফর্ম্যাটিংয়ের সাথেও গোল করতে পারেন ।

দ্রষ্টব্য: দশমিক। রাউন্ড () ম্যাথের চেয়ে আলাদা পদ্ধতি ব্যবহার করে ound রাউন্ড ();

ব্যাঙ্কারের গোলাকার অ্যালগরিদমের জন্য এখানে একটি দরকারী পোস্ট টি। বৃত্তাকার সম্পর্কে এখানে রেমন্ডের একটি হাস্যকর পোস্ট দেখুন ...


13

// দুটি দশমিক স্থানে রূপান্তর

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"

1
স্ট্রিং.ফর্ম্যাট ("{0: 0.00}", 140.6767554); ! = "140.67" এটি "140.68" হিসাবে রেন্ডার করে - গোল হয়ে যায়
অ্যান্ডি

7

আমি এটি একটি পুরানো প্রশ্ন জানি কিন্তু দয়া করে গণিত রাউন্ড এবং স্ট্রিং ফর্ম্যাট রাউন্ডের মধ্যে নিম্নলিখিত পার্থক্যগুলির জন্য নোট করুন :

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"

6

এটি সি # তে 2 দশমিক স্থানে গোল করার জন্য:

label8.Text = valor_cuota .ToString("N2") ;

ভিবি.নেটে:

 Imports System.Math
 round(label8.text,2)

5

আপনি যদি কোনও সংখ্যার গোল করতে চান তবে আপনি পৃথক ফলাফল অর্জন করতে পারেন: আপনি ম্যাথটি কীভাবে ব্যবহার করেন 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);
    }
}

ভেরিয়েবল 'সংশোধক' ভাসমান বা দ্বিগুণ সংখ্যার সাথে অপারেটিংয়ের অসম্পূর্ণতা ঠিক করার জন্য।


4

আপনি যা যা পরীক্ষা করতে চাইতে পারেন তা হ'ল ম্যাথের রাউন্ডিং মেকানিজম ound রাউন্ড:

http://msdn.microsoft.com/en-us/library/system.midpointrounding.aspx

এগুলি বাদে আমি ম্যাথ.রাউন্ড (ইনপুটনামার, নাম্বার অফপ্লেসস) * 100/100 একের ওপরে যোগাযোগ করার পরামর্শ দিচ্ছি কারণ এটি পরিষ্কার।


3

আপনি ম্যাথ ব্যবহার করে গোল করতে চান এমন সংখ্যাগুলির সংখ্যা নির্দিষ্ট করতে সক্ষম হবেন ound রাউন্ড (আপনার নাম্বার, ২)

আপনি এখানে আরও পড়তে পারেন ।




1

আমার একটি দশমিক পরিবর্তনশীল যখন একটি অদ্ভুত পরিস্থিতি ছিল 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

0
  public double RoundDown(double number, int decimalPlaces)
        {
            return Math.Floor(number * Math.Pow(10, decimalPlaces)) / Math.Pow(10, decimalPlaces);
        }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.