Avatar ·

تحويل Decimal إلى Double في C#: كيف تتجنب فقدان الدقة؟

مرحبًا بالجميع! أنا مبتدئ في C# وواجهت مشكلة أثناء العمل مع الحسابات المالية. لدي متغير من نوع `decimal` يخزن مبلغًا بدقة تصل إلى الكوبيكات (مثل 123.45m). أحتاج إلى تمرير هذه القيمة إلى دالة تقبل معاملًا من نوع `double`. جربت التحويل الصريح البسيط: `(double)myDecimal`، وتم تجميع الكود. لكن عندما عرضت النتيجة، لاحظت أن الرقم يتغير أحيانًا. على سبيل المثال، `123.45m` تحول إلى `123.44999999999999`. هذا يسبب أخطاء في الحسابات. إليك مثال على الكود الخاص بي: ```csharp decimal price = 123.45m; double convertedPrice = (double)price; Console.WriteLine(convertedPrice); // يطبع 123.44999999999999 ``` لماذا يحدث هذا؟ كنت أعتقد أن `double` يمكنه تخزين أعداد كبيرة، لكن لماذا تُفقد الدقة؟ هل هناك طريقة لتحويل `decimal` إلى `double` دون فقدان الأرقام العشرية؟ أم يجب علي دائمًا استخدام `decimal` فقط للنقود؟ سأكون ممتنًا للشرح وأمثلة الكود.