2016-07-26 115 views
0

我的問題是:的SQL Server 2008+:模數和十進制/數字數據類型

是它與T-SQL decimalnumeric數據類型使用模運算%相結合的有效運行。

這似乎只要我測試過它的工作,但是這實際上是decimal值的預期的行爲像SELECT 2.0 % 0.4導致0.0,我可以依靠?

我的想法是創建這樣一個查詢:

SELECT itemNumber 
    FROM item i 
    JOIN orderItem oi ON i.ID = oi.itemID 
    WHERE oi.orderID = @orderID 
    AND oi.amount % i.amount <> 0.0000 

實際上,我是驚訝的是,它似乎工作。這是預期的行爲?

我曾期待只有爲整數值工作,並準備使用不同的東西。

對於背景:

我們賣的是一些以米爲單位的預包裝形式我們的東西。數據庫中的數據字段爲numeric(18,4)值,一些預打包單元打包爲十進制值。現在我必須創建一個程序來檢查銷售的商品是否是預先包裝的單位的倍數,確定是否可以發送有效數量的預先包裝物品,如果需要適當地切割物品。

回答

1

對十進制數使用%運算符很危險,因爲十進制數的內部表示可能與期望不同。例如,您可以獲得0.40000000000000001而不是0.4 而查詢SELECT 2.0 % 0.40000000000000001將返回0.39999999999999996。 也許,你應該使用CEILING函數來獲得整個項目的數量:

SELECT CEILING(2.0/0.40000000000000001) --5 
+0

隨着數字(18,4)的精度應該是足夠高的,我認爲? – Adwaenyth

+0

@Adwaenyth它取決於你的環境,如果你測量'量'噸 - 你應該增加更多的數字在右側,如果你使用克,我認爲,這已經足夠了 – Backs

+0

它實際上是米。 – Adwaenyth

相關問題