الشبكة العربية لمطوري الألعاب

مبتدئ  Salam Bahnassi مشاركة 1

السلام عليكم...
لماذا عند تنفيذ الكود التالي (في C#) تظهر نتيجة الطباعة تساوي 0 بدلا من 0.5 على الرغم من أن المتغير معرف double:


using System;
using System.Collections.Generic;
using System.Text;

namespace testo
{
	class Program
	{
		static void Main(string[] args)
		{
            double y = 3/6;
            System.Console.WriteLine(y);
		}
    }
}

خبير مشرف مؤيد مارديني مشاركة 2

سبب المشكلة هو أن لغة الـ#C تستخدم رمز القسمة / لتقسيم الأعداد الصحيحة و تستخدم نفس الرمز لقسمة الأعداد الكسرية، على عكس لغة فيجوال بيسيك دوت نيت التي تستخدم \ لقسمة الأعداد الصحيحة و / لقسمة الأعداد الكسرية، لذلك إن جربت نفس الكود في فيجوال بيسيك فسيعطي النتيجة على أنها 0.5.
لحل هذه المشكلة علينا أن نخبر الـCompiler أننا لا نريد التعامل مع 3 و 6 كأعداد صحيحة و بالتالي ناتج القسمة سيكون عدداً صحيحاً (و هو الصفر) بل عليه أن يعاملها كأعداد كسرية، للقيام بذلك يلزم تغيير 3 إلى 3.0 و 6 إلى 6.0 و سيطبع برنامجك الناتج على أنه 0.5 :
double y = 3.0 / 6.0;
System.Console.WriteLine(y);

Moayad Mardini,
MSDN Forums Moderator