2008-10-29 29 views
4

我正在使用舊的ASP應用程序。我試圖在SQL Server 2000中的一個字段中插入一個值(40.33),它恰好是一個浮點類型。我可以在應用程序中看到的每個地方(通過一些日誌記錄)將40.33發送到存儲過程。當我在調用過程中對數據庫運行SQL Profiler時,我在跟蹤中看到的值是4.033000183105469e + 001將值插入到SQL浮點列中會生成奇怪的結果

所有額外垃圾來自哪裏(183105469)?

爲什麼當我通過40或40.25時沒有額外的東西?

這是使用浮動的奇怪副作用之一嗎?當我寫東西時我通常使用金錢或小數或其他東西,所以不太熟悉float數據類型。

回答

8

是的,這是一個奇怪的,雖然well-known,使用FLOAT的副作用。

在Microsoft SQL Server中,如果您需要具有比例的精確數字,則應使用精確的數字數據類型,如NUMERIC, DECIMAL,MONEY or SMALLMONEY

請勿使用FLOAT。

+0

+1;我打印出(基本上)同樣的東西。 :) – 2008-10-29 19:44:08

+0

真的不是很奇怪......除非你的數學背景不嚴格。 ;-)好回答 – 2008-10-29 20:13:30

0

我認爲這可能只是一個精確問題 - 數字的0.33部分不能完全用二進制表示 - 這可能是最接近的。

0

問題是浮動不是100%準確的。如果你需要確切的數字(特別是在處理貨幣價值時)...你應該使用十進制類型。