2010-01-13 64 views
1

SQL Sever的2000 documentationSQL Server數據類型精度 - Neo,什麼是真實的?

是與 浮點數數據以下有效值:-3.40E + 38通過-1.18E - 38,0和1.18E - 38到3.40E + 38.存儲大小爲 4個字節。在SQL Server中,real的同義詞 是float(24)。

SQL Server 2005中documentation

的ISO同義詞真正爲float(24)。

編輯: 鑑於我正在讀它說的精度爲7,但我可以在我的數據庫(SQL Server 2005)的9參見下面的最大輸入,因爲類似地講here問題沒有。 7.

實施例:0.180000082

什麼是真實真實精度以及是否有配置選項(即:兼容模式),其可影響精度?

回答

8

你的答案是你掛在同一頁面上:

對於FLOAT數據類型,n是用於尾數存儲在科學記數法

24位的位元數尾數給你(大約)7 十進制數字的精度(因爲2^24〜= 10^7)。

編輯補充:

注意,每個人都口口聲聲說「約」 - 這是有原因的:)

二進制浮點數字和小數點文字並不一定以一種直觀的方式一起玩。背景請參閱What Every Computer Scientist Should Know About Floating-Point Arithmetic。另外請注意,說'精度爲'的大約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) 

事實上,realfloat(24)是一個24位尾數的二進制浮點數,我不相信有一種方法可以改變它。如果要存儲精確的小數量,浮點類型通常不是一個好選擇。

+0

感謝您的解釋,這讓我瘋狂! – 2010-01-13 16:37:01

+0

很好的答案,+2鏈接到那個經典的紙張 – Davos 2014-02-26 04:20:07

1

您將二進制(基2)精度與十進制(基準10)精度混淆。 24位給你大約7位十進制數字。

1

SQL Server使用4個字節或8個字節來存儲非十進制浮點數。

如果您在範圍內指定實數或任何值float < 1>浮動< 24>,SQL Server將在內部使用float> < 24>。如果您使用浮點數或浮點數範圍內的任何數值來浮動浮點數(限制),它將使用浮點數,也稱爲雙精度浮點數。

浮法在SQL Server 2005中的MSDN文檔是在這裏:float and real (Transact-SQL)

如果你有一個特定的精度需求,看看而是採用十進制,它提供了可配置的精度和規模:decimal and numeric (Transact-SQL)

相關問題