ডেসিমাল.ডিভাইড (ইনট, ইনট) কাজ করে, তবে (ইনট / ইনট) নয়?


105

কীভাবে দু'টি 32 বিট ইন্টি সংখ্যার বিভাজন আসবে (ইন / ইনট্রি) আমার কাছে ফিরে আসে 0, তবে আমি যদি ব্যবহার Decimal.Divide()করি তবে আমি সঠিক উত্তর পাই? আমি কোনভাবেই এসি # লোক নই।


1
আপনি একটি নির্দিষ্ট উদাহরণ প্রদান করতে পারেন? ডেসিমাল ইন্টার 32 থেকে আলাদা ধরণের।
গ্রো

আমি যেভাবে পেয়েছি দশমিক। ডিভাইড কেবলমাত্র ইনপুট হিসাবে দশমিক গ্রহণ করে।
রবি

দশমিক.ডাইভাইড ইনপুট হিসাবেও পূর্ণসংখ্যার জন্য কাজ করে।
থমরাই টি

উত্তর:


214

intএকটি পূর্ণসংখ্যা টাইপ; দুটি ইনট বিভাজক একটি পূর্ণসংখ্যা বিভাগ সম্পাদন করে , অর্থাত্ ভগ্নাংশটি ছেঁটে ফেলা হয় কারণ এটি ফলাফলের ধরণের (এছাড়াও int!) সংরক্ষণ করা যায় না । Decimalবিপরীতে, একটি ভগ্নাংশ অংশ পেয়েছে। আবাহন করার মাধ্যমে Decimal.Divide, আপনার intআর্গুমেন্ট পরোক্ষভাবে রূপান্তরিত পেতে Decimalগুলি।

আপনি intস্বতঃস্ফূর্ত বিন্দুতে অন্তত একটি যুক্তি সুস্পষ্টভাবে কাস্টিং দ্বারা যুক্তির উপর অ-পূর্ণসংখ্যা বিভাগ প্রয়োগ করতে পারেন , যেমন:

int a = 42;
int b = 23;
double result = (double)a / b;

2
চমৎকার উত্তর. আমি দশমিকও চেষ্টা করেছি iv ডিভাইড (ক, খ) যা একই ফলাফল দিয়েছে।
বেক্সটার

6

প্রথম ক্ষেত্রে, আপনি পূর্ণসংখ্যা বিভাগ করছেন, ফলস্বরূপ কাটা হয়েছে (দশমিক অংশটি কাটা হয়েছে) এবং একটি পূর্ণসংখ্যা ফিরে আসে is

দ্বিতীয় ক্ষেত্রে, ints প্রথমে দশমিক মধ্যে রূপান্তরিত হয়, এবং ফলাফল একটি দশমিক। সুতরাং এগুলি কেটে ফেলা হয় না এবং আপনি সঠিক ফলাফল পান।


4

নিম্নলিখিত লাইন:

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

2

আমি গণনা Decimal.Divide(decimal, decimal)সুস্পষ্টভাবে এর 2 ইন্ট আর্গুমেন্টকে দশমিকের সাথে রূপান্তর করে দশমিক মান (সুনির্দিষ্ট) ফেরার আগে যেখানে 4/5 হিসাবে পূর্ণসংখ্যা বিভাগ হিসাবে গণ্য করা হয় এবং 0 প্রদান করে


1

আপনি সংখ্যাটি কাস্ট করতে চান:

ডাবল সি = (ডাবল) এ / (ডাবল) বি;

দ্রষ্টব্য: সি # এর যে কোনও যুক্তি যদি ডাবল হয় তবে একটি ডাবল বিভাজন ব্যবহৃত হয় যার ফলস্বরূপ ডাবল হয়। সুতরাং, নিম্নলিখিতগুলিও কাজ করবে:

ডাবল সি = (ডাবল) এ / বি;

এখানে একটি ছোট প্রোগ্রাম:

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

0

আপনি যদি 0 <a <1 উত্তর খুঁজছেন তবে ইনট / ইনট যথেষ্ট হবে না। int / int পূর্ণসংখ্যা বিভাজন করে। অপারেশনটির অভ্যন্তরের কোনওটিকে দ্বিগুণ করার চেষ্টা করুন।


1
ইন্ট 32 হ'ল একটি স্বাক্ষরিত পূর্ণসংখ্যা, আপনার অর্থ 0 উত্তর <1?
গ্রো

0

আমার ক্ষেত্রে উপরে কিছুই কাজ করেনি।

আমি যা করতে চাই তা হল 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 দ্বারা গুণাও।


-1

এরূপ হিসাবে চিহ্নিত উত্তরটি খুব কাছেই রয়েছে, তবে আমি মনে করি এটি যুক্তিযুক্ত যে ডাবল এবং দশমিক ব্যবহারের মধ্যে একটি পার্থক্য রয়েছে worth

উইকিপিডিয়া থেকে ধারণাগুলি ব্যাখ্যা করার জন্য আমি আরও ভাল কাজ করব না, সুতরাং আমি কেবল পয়েন্টারগুলি সরবরাহ করব:

ভাসমান-পয়েন্ট গণিত

দশমিক তথ্য প্রকার

আর্থিক ব্যবস্থায় এটি প্রায়শই প্রয়োজন হয় যা আমরা নির্দিষ্ট সংখ্যক (বেস -10) দশমিক স্থানের নির্ভুলতার গ্যারান্টি দিতে পারি। ইনপুট / উত্স ডেটা বেস -10 এ থাকলে এটি সাধারনত অসম্ভব তবে আমরা বেস -২ তে পাটিগণিত সম্পাদন করি (কারণ সংখ্যার দশমিক দশমিক সংখ্যার জন্য দশমিক জায়গাগুলির সংখ্যা নির্ভর করে; এক তৃতীয়াংশ অসীম অনেক দশমিক লাগে বেস -10 এ 0.333333 হিসাবে প্রকাশের স্থান ... তবে এটি বেস -3: 0.1 তে মাত্র একটি দশমিক লাগে।

ফ্লোটিং-পয়েন্ট নম্বরগুলি (সিপিইউ সময়ের নিরিখে প্রোগ্রামিং-ভিত্তিতে তারা সমান সহজ) সাথে কাজ করার জন্য দ্রুত এবং যখনই আপনি বৃত্তাকার ত্রুটি (বৈজ্ঞানিক অ্যাপ্লিকেশনগুলির মতো) কমিয়ে আনতে চান তখন পছন্দ করেন।


1
আপনার প্রতিক্রিয়ায় কিছুই আসল প্রশ্নের উত্তর দেয় না
লর্ডউইলমোর
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.