هل يجب علي استخدام العلامة العشرية أو العائمة أو المزدوجة للحصول على نتيجة الرياضيات البسيطة هذه؟

StackOverflow https://stackoverflow.com/questions/340270

سؤال

أقوم ببعض العمليات الحسابية البسيطة حقًا وأحفظ النتيجة في قاعدة بيانات MS SQL2008.

أنا المتوسط أخرج بعض الأرقام، وهي قيم بايت بين 1<->5.أرغب في تسجيل منزلتين عشريتين فقط.لا أهتم بالتقريب للمكان العشري الثاني (على سبيل المثال.أ 1.155 == 1.5 أو 1.6 ..أنا لست مرحلية للغاية).

لذا ..هل يجب أن أقوم بتخزين النتيجة المتوسطة كعدد عشري أو عشري أو مزدوج؟

عندما أتحقق مما يُرجعه LINQ، يمكنه إرجاع القيم الثلاث جميعها!

وأخيرًا، ما هو حقل نوع بيانات SQL ذي الصلة أيضًا.

هتافات!

هل كانت مفيدة؟

المحلول

ما تحتاجه هو نوع البيانات DECIMAL:

declare @val decimal(10,2)
select @val = 10.155
select @val

عند إدخال القيم، يمكنك إما الاعتماد على التقريب المضمن، أو تحديد التقريب الذي تريده بشكل صريح:

select val = round(10.155, 2, 0) -- rounded
select val = round(10.155, 2, 1) -- truncated

الرقم العشري (10،2) يعني أنه يمكن استخدام عشرة أرقام، ويجب اعتبار أن اثنين منها يقعان بعد العلامة العشرية.أي.أعلى رقم يمكن أن يحتوي عليه العلامة العشرية (4,2) هو 99.99.ستؤدي محاولة ضبطه على 100 إلى تجاوز السعة الحسابية.

نصائح أخرى

سأختار Float over Double وربما Float over Decimal:.سأختار Float على الرغم من أن الجميع يجب أن يعطيوا نفس النتيجة.

إلقاء نظرة على هاتين الصفحتين ل يطفو & الكسور العشرية

العشري يستخدم بشكل رئيسي للعملة.على الرغم من نجاحه، إلا أن الناس قد يجدونه مربكًا.في هذه الحالة أعتقد أن الطفو سيكون خيارًا أفضل.

النظام العشري - هو الأبسط، ولكن أيًا من الأشخاص الذين تم تصميمهم سوف يقومون بهذه المهمة

إذا كنت تريد تخزين النتائج باستخدام أقل مساحة ممكنة، فمن المحتمل أن تفعل شيئًا مثل هذا (الرمز الكاذب):

integer = ( sum(all_values) / all_values.count().float ) * 100;

سيعطيك هذا القيمة 352 بمتوسط ​​3.52 حتى تتمكن من تخزينها كعدد صحيح (أعتقد أن البايت سيكون كبيرًا بما يكفي)، وتقسيمه على 100 فقط عندما تريد عرضه.

من ناحية أخرى، إذا كنت لا تهتم بتخزين القيمة المتوسطة، فقد يكون استخدام القيم العائمة أسرع.(اختبر كليهما لمعرفة ما هو الأسرع بالفعل على نظامك.)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top