কীভাবে দু'টি 32 বিট ইন্টি সংখ্যার বিভাজন আসবে (ইন / ইনট্রি) আমার কাছে ফিরে আসে 0
, তবে আমি যদি ব্যবহার Decimal.Divide()
করি তবে আমি সঠিক উত্তর পাই? আমি কোনভাবেই এসি # লোক নই।
কীভাবে দু'টি 32 বিট ইন্টি সংখ্যার বিভাজন আসবে (ইন / ইনট্রি) আমার কাছে ফিরে আসে 0
, তবে আমি যদি ব্যবহার Decimal.Divide()
করি তবে আমি সঠিক উত্তর পাই? আমি কোনভাবেই এসি # লোক নই।
উত্তর:
int
একটি পূর্ণসংখ্যা টাইপ; দুটি ইনট বিভাজক একটি পূর্ণসংখ্যা বিভাগ সম্পাদন করে , অর্থাত্ ভগ্নাংশটি ছেঁটে ফেলা হয় কারণ এটি ফলাফলের ধরণের (এছাড়াও int
!) সংরক্ষণ করা যায় না । Decimal
বিপরীতে, একটি ভগ্নাংশ অংশ পেয়েছে। আবাহন করার মাধ্যমে Decimal.Divide
, আপনার int
আর্গুমেন্ট পরোক্ষভাবে রূপান্তরিত পেতে Decimal
গুলি।
আপনি int
স্বতঃস্ফূর্ত বিন্দুতে অন্তত একটি যুক্তি সুস্পষ্টভাবে কাস্টিং দ্বারা যুক্তির উপর অ-পূর্ণসংখ্যা বিভাগ প্রয়োগ করতে পারেন , যেমন:
int a = 42;
int b = 23;
double result = (double)a / b;
প্রথম ক্ষেত্রে, আপনি পূর্ণসংখ্যা বিভাগ করছেন, ফলস্বরূপ কাটা হয়েছে (দশমিক অংশটি কাটা হয়েছে) এবং একটি পূর্ণসংখ্যা ফিরে আসে is
দ্বিতীয় ক্ষেত্রে, ints প্রথমে দশমিক মধ্যে রূপান্তরিত হয়, এবং ফলাফল একটি দশমিক। সুতরাং এগুলি কেটে ফেলা হয় না এবং আপনি সঠিক ফলাফল পান।
নিম্নলিখিত লাইন:
int a = 1, b = 2;
object result = a / b;
... পূর্ণসংখ্যার গাণিতিক ব্যবহার করে সঞ্চালিত হবে । Decimal.Divide
অন্যদিকে প্রকারের দুটি পরামিতি লাগে Decimal
, সুতরাং বিভাগটি পূর্ণসংখ্যার মানগুলির চেয়ে দশমিক মানগুলিতে সম্পাদিত হবে। এটি এর সমতুল্য:
int a = 1, b = 2;
object result = (Decimal)a / (Decimal)b;
এটি পরীক্ষা করতে, আপনি উপরের প্রতিটি উদাহরণের পরে নিম্নলিখিত কোড লাইনগুলি যুক্ত করতে পারেন:
Console.WriteLine(result.ToString());
Console.WriteLine(result.GetType().ToString());
প্রথম ক্ষেত্রে আউটপুট হবে
0
System.Int32
.. এবং দ্বিতীয় ক্ষেত্রে:
0,5
System.Decimal
আপনি সংখ্যাটি কাস্ট করতে চান:
ডাবল সি = (ডাবল) এ / (ডাবল) বি;
দ্রষ্টব্য: সি # এর যে কোনও যুক্তি যদি ডাবল হয় তবে একটি ডাবল বিভাজন ব্যবহৃত হয় যার ফলস্বরূপ ডাবল হয়। সুতরাং, নিম্নলিখিতগুলিও কাজ করবে:
ডাবল সি = (ডাবল) এ / বি;
এখানে একটি ছোট প্রোগ্রাম:
static void Main(string[] args)
{
int a=0, b = 0, c = 0;
int n = Convert.ToInt16(Console.ReadLine());
string[] arr_temp = Console.ReadLine().Split(' ');
int[] arr = Array.ConvertAll(arr_temp, Int32.Parse);
foreach (int i in arr)
{
if (i > 0) a++;
else if (i < 0) b++;
else c++;
}
Console.WriteLine("{0}", (double)a / n);
Console.WriteLine("{0}", (double)b / n);
Console.WriteLine("{0}", (double)c / n);
Console.ReadKey();
}
আমার ক্ষেত্রে উপরে কিছুই কাজ করেনি।
আমি যা করতে চাই তা হল 278 কে 575 দ্বারা ভাগ করা এবং শতকরা সন্ধানের জন্য 100 দ্বারা গুণা।
double p = (double)((PeopleCount * 1.0 / AllPeopleCount * 1.0) * 100.0);
%: 48,3478260869565 -> 278/575 ---> 0%: 51,6521739130435 -> 297/575 ---> 0
যদি আমি পিপলসাউন্টকে ১.০ দিয়ে গুণ করি তবে এটি দশমিক এবং বিভাগটি 48.34 হবে ... এছাড়াও 100 দ্বারা নয় 100.0 দ্বারা গুণাও।
এরূপ হিসাবে চিহ্নিত উত্তরটি খুব কাছেই রয়েছে, তবে আমি মনে করি এটি যুক্তিযুক্ত যে ডাবল এবং দশমিক ব্যবহারের মধ্যে একটি পার্থক্য রয়েছে worth
উইকিপিডিয়া থেকে ধারণাগুলি ব্যাখ্যা করার জন্য আমি আরও ভাল কাজ করব না, সুতরাং আমি কেবল পয়েন্টারগুলি সরবরাহ করব:
আর্থিক ব্যবস্থায় এটি প্রায়শই প্রয়োজন হয় যা আমরা নির্দিষ্ট সংখ্যক (বেস -10) দশমিক স্থানের নির্ভুলতার গ্যারান্টি দিতে পারি। ইনপুট / উত্স ডেটা বেস -10 এ থাকলে এটি সাধারনত অসম্ভব তবে আমরা বেস -২ তে পাটিগণিত সম্পাদন করি (কারণ সংখ্যার দশমিক দশমিক সংখ্যার জন্য দশমিক জায়গাগুলির সংখ্যা নির্ভর করে; এক তৃতীয়াংশ অসীম অনেক দশমিক লাগে বেস -10 এ 0.333333 হিসাবে প্রকাশের স্থান ... তবে এটি বেস -3: 0.1 তে মাত্র একটি দশমিক লাগে।
ফ্লোটিং-পয়েন্ট নম্বরগুলি (সিপিইউ সময়ের নিরিখে প্রোগ্রামিং-ভিত্তিতে তারা সমান সহজ) সাথে কাজ করার জন্য দ্রুত এবং যখনই আপনি বৃত্তাকার ত্রুটি (বৈজ্ঞানিক অ্যাপ্লিকেশনগুলির মতো) কমিয়ে আনতে চান তখন পছন্দ করেন।