SQL خادم نوع البيانات الدقة - الجديدة، ما هو حقيقي؟

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

  •  20-09-2019
  •  | 
  •  

سؤال

وSQL 2000 ملقم الوثائق :

<اقتباس فقرة>   

هل العائمة نقطة بيانات الرقم مع   ما يلي القيم الصالحة: -3.40E +   38 من خلال -1.18E - 38، 0 و1.18E -   38 خلال 3.40E + 38. حجم التخزين هو   4 بايت. في SQL Server أو مرادف   لريال مدريد هو تعويم (24).

وSQL خادم 2005 الوثائق :

<اقتباس فقرة>   

وهذا مرادف ISO لريال مدريد هو تعويم (24).

وتحرير: وبالنظر إلى ما أقرأه تقول ودقة هو 7 ولكن يمكنني أن أدخل في قاعدة البيانات (SQL خادم 2005) كحد أقصى من 9 انظر أدناه، كما جاء بالمثل <لأ href = "http://www.sql-server-helper.com /faq/data-types-p01.aspx "يختلط =" noreferrer نوفولو "> هنا السؤال لا. 7.

وعلى سبيل المثال: 0.180000082

ما هي الدقة الحقيقية على حقيقية وهناك خيارات التكوين؟ (أي: وسائط التوافق) التي يمكن أن تؤثر على دقة

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

المحلول

وإجابتك على تلك الصفحة نفسها التي ترتبط:

<اقتباس فقرة>   

لنوع البيانات تعويم، ن هو عدد <قوية> بت المستخدمة لتخزين الجزء العشري في العلمي

و24 بت من العشري يعطيك (تقريبا) 7 <م> العشرية أرقام من الدقة (ل2 ^ 24 ~ = 10 ^ 7).

تحرير إضافة:

لاحظ أن كل شخص يحتفظ قائلا "تقريبا" - وهذا هو لسبب:)

وثنائي أرقام النقطة العائمة والحرفية عشري لا تلعب بالضرورة معا بطريقة بديهية. لخلفية قراءة ما كل الحاسوب عالم أن تعرف عن العائمة نقطة الحساب . لاحظ أيضا أن قوله "ما يقرب من 7 أرقام عشرية من الدقة 'لا يتعارض مع القدرة على تخزين قيمة مع أكثر من 7 أرقام كبيرة! هل يعني ذلك أن هذا نوع البيانات لن تكون قادرة على التمييز بين 0.180000082 و0.180000083، على سبيل المثال، لأنه لم يتم تخزين الواقع <م> بالضبط قيمة إما:

declare @f1 real
declare @f2 real

set @f1 = 0.180000082
set @f2 = 0.180000083

select @f1, @f2

select @f1 - @f2

------------- -------------
0.1800001     0.1800001

(1 row(s) affected)


-------------
0

(1 row(s) affected)

والحقيقة هي أن real هو نفس float(24)، ثنائي العائمة رقم نقطة مع 24 بت من العشري، وأنا لا أعتقد أن هناك طريقة لتغيير هذا. أنواع الفاصلة العائمة هي بشكل عام ليست خيارا جيدا إذا كنت ترغب في تخزين كميات العشرية بالضبط.

نصائح أخرى

وأنت الخلط بين ثنائي (القاعدة 2) الدقة مع عشري (قاعدة 10) الدقة. 24 بت تعطيك ما يقرب من 7 أرقام عشرية.

ويستخدم SQL Server إما 4 أو 8 بايت بايت لتخزين غير عشري العائمة أرقام نقطة.

إذا قمت بتحديد القيمة الحقيقية أو أي في تعويم مجموعة <1> لتعويم <24>، والاستخدامات الخادم SQL تطفو <24> داخليا. إذا كنت تستخدم تعويم أو أي شيء في تعويم مجموعة <25> لتعويم <53> (الحد)، فإنه يستخدم تعويم <53> والذي يعرف أيضا باسم الدقة المزدوجة.

وثائق MSDN لتطفو في SQL Server 2005 هنا هو: تعويم وحقيقية ( للعمليات SQL)

إذا كان لديك حاجة محددة بدقة، والنظر بدلا من ذلك في استخدام عشري، الذي يوفر الدقة شكلي وعلى نطاق و: <لأ href = "http://msdn.microsoft.com/en-us/library/ms187746٪28SQL.90 ٪ 29.aspx "يختلط =" noreferrer نوفولو "> العشرية ورقمية (SQL للعمليات)

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