সি # এর নিকটতম পুরো সংখ্যায় কিভাবে গোল করবেন?


92

আমি কীভাবে নিকটতম পূর্ণসংখ্যার মানগুলিকে গোল করতে পারি?

উদাহরণ স্বরূপ:

1.1 => 1
1.5 => 2
1.9 => 2

"ম্যাথ.সিলিং ()" আমাকে সাহায্য করছে না। কোন ধারনা?


4
ম্যাথ.রাউন্ড () কৌতুক করতে পারে।
শুধুমাত্র বলিভিয়ান এখানে

উত্তর:


203

আরও জন্য সরকারী ডকুমেন্টেশন দেখুন। উদাহরণ স্বরূপ:

মূলত আপনি Math.Roundপদ্ধতিটি তিনটি পরামিতি দিন।

  1. আপনি গোল করতে চান মান।
  2. দশকের দশকের সংখ্যাটি আপনি মানের পরে রাখতে চান।
  3. আপনি অ্যাওফ্রোমজিরো রাউন্ডিংটি ব্যবহার করতে অনুরোধ করতে পারেন এমন একটি alচ্ছিক প্যারামিটার। ( রাউন্ডিং অস্পষ্ট না হলে উপেক্ষা করুন, উদাহরণস্বরূপ 1.5 )

কোডের উদাহরণ:

var roundedA = Math.Round(1.1, 0); // Output: 1
var roundedB = Math.Round(1.5, 0, MidpointRounding.AwayFromZero); // Output: 2
var roundedC = Math.Round(1.9, 0); // Output: 2
var roundedD = Math.Round(2.5, 0); // Output: 2
var roundedE = Math.Round(2.5, 0, MidpointRounding.AwayFromZero); // Output: 3
var roundedF = Math.Round(3.49, 0, MidpointRounding.AwayFromZero); // Output: 3

সরাসরি নমুনা

আপনি MidpointRounding.AwayFromZeroযদি একটি .5 মান গোল করে নিতে চান তবে আপনার প্রয়োজন । দুর্ভাগ্যক্রমে এটি এর জন্য পূর্বনির্ধারিত আচরণ নয় Math.Round()। তাহলে ব্যবহার MidpointRounding.ToEven(ডিফল্ট) মান নিকটতম বৃত্তাকার হয় এমনকি নম্বর ( 1.5বৃত্তাকার হয় 2, কিন্তু 2.5এছাড়াও বৃত্তাকার হয় 2)।


14
অন্যদিকে, ব্যবহার away from zeroকরার অর্থ এটিও -1.5গোল হয়ে যাবে -2
ডেভোগটল্যান্ড

4
: ব্যবহার Math.Ceiling, তার না একটি ভাল অনুশীলন frictions জন্য Math.Round ব্যবহার করতে পড়তে stackoverflow.com/questions/9221205/... ,
Yakir ম্যানর

4
আমি ম্যাথটি খুঁজে পাচ্ছি ound রাউন্ড (1.5, 0) 2
ডেভিড সাইকস

@ ড্যাভোগটল্যান্ড কি তাদের যাইহোক 137.5 থেকে 140 এর চেয়ে 138 এর মতো গোল করতে পারে? মানে নিকটতম দশমীতে গোল করা?
স্যাম

4
@ স্যাম সম্ভবত 10 দ্বারা বিভক্ত হবে, তারপরে ম্যাথ দিয়ে গোল করবে। চিলিং, এবং শেষ পর্যন্ত 10 দ্বারা একক?
ডেভোগটল্যান্ড

64
Math.Ceiling

সর্বদা বৃত্তাকার (সিলিংয়ের দিকে)

Math.Floor

সর্বদা বৃত্তাকার (ফ্লোর দিকে)

আপনি কি পরে সহজ হয়

Math.Round

যা পোস্ট হিসাবে এই রাউন্ড


তাদের যাইহোক 137.5 থেকে 140 এর চেয়ে 138 এর চেয়ে বেশি হয়? মানে নিকটতম দশমীতে গোল করা?
স্যাম

7

আপনার দরকার Math.Round, দরকার নেই Math.CeilingCeilingসর্বদা "রাউন্ড" আপ হয়, যখন Roundদশমিক বিন্দুর পরে মানের উপর নির্ভর করে রাউন্ডগুলি উপরে বা নীচে থাকে।


6

এই ম্যানুয়ালটি আছে, এবং খুব সুন্দর উপায়:

double d1 = 1.1;
double d2 = 1.5;
double d3 = 1.9;

int i1 = (int)(d1 + 0.5);
int i2 = (int)(d2 + 0.5);
int i3 = (int)(d3 + 0.5);

কেবল যে কোনও সংখ্যায় ০.০ যোগ করুন এবং এটি (অথবা এটি মেঝেতে) ফেলে দিন এবং এটি গাণিতিকভাবে সঠিকভাবে গোল হবে: ডি


এটি এখনও সন্দেহজনক দেখাচ্ছে। প্রথমত, প্রশ্নটি বৃত্তাকার সম্পর্কে জিজ্ঞাসা করে এবং দ্বিতীয়ত, যখন আমি এখনই এটি চেষ্টা করেছি, তখন ম্যাথের ডিফল্ট বাস্তবায়ন ound
স্প্রিং

এছাড়াও, আপনার উদাহরণ দশমিক কমা সাথে দশমিক বিন্দু মিশ্রিত করে। আপনি সাধারণত কোনটি ব্যবহার করেন (সুইডেনে, আমার ধারণা)? :)
ver

ওফ ... ওহ, দুঃখিত দশমিক পয়েন্ট প্রোগ্রামিংয়ে অবশ্যই, তবে আনুষ্ঠানিক পাঠ্যে আমরা দশমিক কমা ব্যবহার করি। এবং হ্যাঁ, প্রশ্নটি, এবং "বৃত্তাকার" অংশ সম্পর্কে সুইডেন। আমি মনে করি এটি কেবল কিছু ভাষার ভুল। অপ দ্বারা প্রদত্ত উদাহরণগুলিতে, কয়েকটি দশমিক সংখ্যা নীচে।
ডেভোগটল্যান্ড

@ যতক্ষণ না আমি ম্যাথ দিয়ে গোল করি না ound এই কারণেই এই
উপায়টি

5

অন্যরা প্রস্তাবিত (প্রস্তাবিত) হিসাবে আপনি ম্যাথটি রাউন্ড ব্যবহার করতে পারেন, বা আপনি 0.5 টি যোগ করতে পারেন এবং কোনও ইনটিতে (যা দশমিক অংশকে ছাড়বে) যোগ করতে পারেন।

double value = 1.1;
int roundedValue = (int)(value + 0.5); // equals 1

double value2 = 1.5;
int roundedValue2 = (int)(value2 + 0.5); // equals 2

5

কেবল একটি অনুস্মারক। দ্বিগুণ জন্য সাবধান।

Math.Round(0.3 / 0.2 ) result in 1, because in double 0.3 / 0.2 = 1.49999999
Math.Round( 1.5 ) = 2

3

আপনার কাছে ম্যাথ.রাউন্ড ফাংশন রয়েছে যা আপনি যা চান ঠিক তা করে।

Math.Round(1.1) results with 1
Math.Round(1.8) will result with 2.... and so one.

4
1.5মূল্য হিসাবে কি ? আপনার আরও পরামিতি দরকার।
শুধুমাত্র বলিভিয়ান এখানে

2

এটি ইতিমধ্যে 5 দ্বারা বিভাজ্য থাকলে এটি নিকটতম 5 পর্যন্ত পরিবর্তন হবে বা পরিবর্তন হবে না

public static double R(double x)
{
    // markup to nearest 5
    return (((int)(x / 5)) * 5) + ((x % 5) > 0 ? 5 : 0);
}

2

আমি এটি সন্ধান করছিলাম, তবে আমার উদাহরণটি ছিল 4.2769 এর মতো একটি সংখ্যা নেওয়া এবং এটি কেবল 4.3 হিসাবে একটি স্প্যানে ফেলে দেওয়া। ঠিক একই নয়, তবে এটি যদি সহায়তা করে:

Model.Statistics.AverageReview   <= it's just a double from the model

তারপরে:

@Model.Statistics.AverageReview.ToString("n1")   <=gives me 4.3
@Model.Statistics.AverageReview.ToString("n2")   <=gives me 4.28

ইত্যাদি ...


1.5m.ToString ( "N0") // আয় "2": আমি এই আপনার পদ্ধতি ব্যবহার করছি, কারণ আমি একটি স্ট্রিং এবং .ToString প্রয়োজন ( "N0") যত্ন আমার জন্য rounding এর লাগে
নাথন Prather



0

যদি আপনার ভাসমান পয়েন্ট সংখ্যাগুলির চেয়ে পূর্ণসংখ্যার সাথে কাজ করা হয় তবে এখানে উপায়।

#define ROUNDED_FRACTION(numr,denr) ((numr/denr)+(((numr%denr)<(denr/2))?0:1))

এখানে "নামার" এবং "ডেনার" উভয়ই স্বাক্ষরবিহীন পূর্ণ পূর্ণসংখ্যা।



0

আপনার নিজস্ব বৃত্তাকার পদ্ধতি লিখুন। কিছুটা এইরকম,

function round(x) rx = Math.ceil(x) if (rx - x <= .000001) return int(rx) else return int(x) end


-1
decimal RoundTotal = Total - (int)Total;
if ((double)RoundTotal <= .50)
   Total = (int)Total;
else
   Total = (int)Total + 1;
lblTotal.Text = Total.ToString();
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.