2010-11-15 72 views
9

我有一個視圖,需要爲存儲爲float的列返回類型十進制。在SQL Server 2008中將浮點數轉換爲十進制數

我可以投每一列到十進制如下:

, CAST(Field1 as decimal) Field1 

這種方法的問題在於,小數默認爲18,0,它會自動舍入浮動列0。我想保持精度高達12位小數。

然而,如果我這樣做:

, CAST(Field1 as decimal(12,12)) Field1 

我得到一個運行時錯誤:

"Arithmetic overflow error converting float to data type numeric" 

浮子列被定義爲長度:8精度:53在表中。我無法修改任何關於桌子的事情。

什麼是正確的方式將它作爲十進制轉換爲輸出小數精度?

+1

我的建議是,你停止存儲數據爲float,因爲它是一個不精確的數據類型,如果你對它進行計算,你會得到舍入誤差。 – HLGEM 2010-11-15 18:04:40

回答

21

12, 12意味着小數分離器之前沒有數字:12位數總共是其中12週期之後。

使用更合適的範圍,說:

DECLARE @var FLOAT = 100 
SELECT CAST(@var as decimal(20,12)) 

,讓你在分離器之前8位,或根據需要進行調整。

+0

非常感謝,你知道是否有格式化它的方式,所以如果有值的話它只返回小數位?如果我從表中選擇,它不會顯示尾部0,但在投12個零總是顯示.. – 2010-11-15 17:22:41

+0

@Sonic:所以你需要:返回一個'DECIMAL'或格式?格式化會讓你使用'VARCHAR'。 – Quassnoi 2010-11-15 19:21:55

相關問題