當我發現一些奇怪的行爲時,我在SQL Server中執行了一些簡單的財務計算。我試圖將一串數字轉換爲十進制類型。雖然字符串不包含小數點,但我從規範中知道,字符串中的最後3個位置應該在小數點後面。在SQL Server中劃分十進制類型導致不必要的尾隨零
我的第一種方法是有缺陷的,但就這樣的事情:
select convert(decimal(11,3),89456123/1000) as TotalUnits
這導致89456.000。在投射前進行除法,導致小數部分被截斷。
所以我感動的除法運算中投之外,像這樣:
select convert(decimal(11,3),89456123)/1000 as TotalUnits
這導致位置的小數點後爆炸。它返回89456.12300000
根據我的十進制規範,我想要11位數字,其中3個小數點後面。現在我總共有13位數字,小數點後面有8位數字。發生了什麼?
爲了得到我想要的東西,我想我必須加倍投,像這樣:
select convert(decimal(11,3), convert(decimal(11,3),89456123)/1000)
這給89456.123。
事實證明,無論我除以什麼,結果小數點爆炸是相同的。該部門是否將數據類型轉換爲雙重或其他?
我的問題是這樣的: 爲什麼會發生這種情況,並且有沒有更好的方法來補償它,而不是雙重鑄造爲十進制。
編輯 我發現這個similar question上如此,但它看起來像他們再次雙擊鑄造。
這適用於RME:'選擇轉換(十進制(11,3),1000分之89456123)' – RBarryYoung 2014-11-20 17:39:08