لماذا القسمة تعطي صفر ؟!
السلام عليكم
انا حاب استفسر عن سوال في القسمة على عدد اصفاره اكثر او تساوي 4 , يعطي الاجابة صفر ! لماذا ؟
هل بسبب ال Range ?
public static void printMegaBytesAbdKiloBytes(int kiloBytes){
int megabytes = kiloBytes / 10000;
int remainingkilobytes = megabytes ;
if(kiloBytes < 0 ){
System.out.println( " Invalid Value ");
}
System.out.println(kiloBytes + " KB = " + megabytes + " MB and " + remainingkilobytes + " KB ");
}
الإجابة الصحيحة
وعليكم السلام،،
من الواضح أنك تريد النتيجة على شكل رقم عشري،
بينما تستخدم في الكود السابق Integer division.
في جافا عندما تقسم عددا من نوع Integer، على عدد آخر من نوع Integer، فالناتج قطعا سيكون Integer أيضا،
مثال، ناتج قسمة 1/10 تساوي دائما 0 ولا تساوي 0.1، لأن القسمة هنا يجب ان ترجع قيمة integer فتحذف الفاصلة العشرية،
كذلك مثلا ناتج قسمة 10/4 الذي يساوي في الأساس 2.5، سيُنتِجُ في جافا 2 فقط.
ما الحل ؟
الحل بجعل أحد الرقمين أو كلاهما من نوع double ( أو float )
فبدلا من هذا التعبير الحسابي:
kiloBytes / 10000;
يمكنك كتابة هذا:
kiloBytes / 10000.0;
وبما أن أحد الرقمين من نوع Double فالنتيجة ستكون Double بالطبع،
احيانا قد لا توجد ارقام ثابتة فالتعبير الحسابي، كقسمة x / y مثلا، فالحل باستخدام casting، مثال:
kilobyte / (double)megabyte
بعد تعديل الكود السابق الخاص بك، لا تنسى تغيير أنواع المتغيرات لديك لتتمكن من استقبال القيمة على شكل double.
الإجابات (1)
وعليكم السلام،،
من الواضح أنك تريد النتيجة على شكل رقم عشري،
بينما تستخدم في الكود السابق Integer division.
في جافا عندما تقسم عددا من نوع Integer، على عدد آخر من نوع Integer، فالناتج قطعا سيكون Integer أيضا،
مثال، ناتج قسمة 1/10 تساوي دائما 0 ولا تساوي 0.1، لأن القسمة هنا يجب ان ترجع قيمة integer فتحذف الفاصلة العشرية،
كذلك مثلا ناتج قسمة 10/4 الذي يساوي في الأساس 2.5، سيُنتِجُ في جافا 2 فقط.
ما الحل ؟
الحل بجعل أحد الرقمين أو كلاهما من نوع double ( أو float )
فبدلا من هذا التعبير الحسابي:
kiloBytes / 10000;
يمكنك كتابة هذا:
kiloBytes / 10000.0;
وبما أن أحد الرقمين من نوع Double فالنتيجة ستكون Double بالطبع،
احيانا قد لا توجد ارقام ثابتة فالتعبير الحسابي، كقسمة x / y مثلا، فالحل باستخدام casting، مثال:
kilobyte / (double)megabyte
بعد تعديل الكود السابق الخاص بك، لا تنسى تغيير أنواع المتغيرات لديك لتتمكن من استقبال القيمة على شكل double.
Mohammedsj19: شكرالك
لايوجد لديك حساب في عالم البرمجة؟
تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !