2013-02-27 70 views
0

我明白float and real areReal和浮點數的小數長度和準確性

近似數數據類型與浮點數字 數據使用。浮點數據是近似的;因此,不是所有的值都可以精確地表示數據類型範圍 。

然而,在下面的例子:

Q1:爲什麼'浮動()'(即;真實)給出更小數「浮動( )'還不夠準確?

Q2:如何存放@s在許多領域,因爲它是不四捨五入?

declare @s varchar(50) = '34.770438199999944' 
select convert(float(24), @s) real_, convert(float(53), @s) float_ 

Results(括號內是使DIFF更清晰)

|    real_ |  float_ | 
------------------------------------ 
| 34.77043(9147949) | 34.77043(82) | 

回答

0

Q1。這只是一個顯示問題,對於其他數字它可能不同。它將在更適合的地方回合(它將更接近數字的真實近似值)。由於數據存儲數量較少,所以精度較低。

Q2。在mssql中(因爲標籤聲明sql-server),你可以創建一個小數,並且你將存儲這個數字而不會丟失精確度。但是你可以儲存的數量是有限的。

+0

你能解釋一下'精度較低,因爲它有較少的數據來存儲數字'?是關於浮動還是真實? – Kaf 2013-02-27 16:31:50

+0

那麼..每個數字或者是浮點數都表示在多個位上。例如1個字節= 8位。它可以保存0到255之間的數字(2^8個數字)。如果你去2個字節的數字,你會有2^16等等。使用浮點數的推理是相似的,但數字不是按原樣存儲的,而是以2位數字的形式存儲的:有效數字和指數。有了這2,你可以近似一個非常大的數字範圍。現在float和real用不同的字節數表示。具有更多字節來存儲其中的2個數字的浮點可以更準確地保存數據。 – 2013-02-27 17:08:34