2016-07-26 8 views
0

私の質問は:T-SQLでdecimalまたはnumericデータ型と組み合わせてモジュロ演算子%を使用するには、有効な操作SQL Serverの2008+:モジュロと小数/数値データ型

です。

限り、私はそれをテストしてきたように動作しているようですが、これは0.0をもたらすために、実際にSELECT 2.0 % 0.4ようdecimal値に対して意図された動作であり、私はそれに頼ることができますか?

私の考えでは、このようなクエリを作成することでした。

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

10進数の内部表現が期待と異なる可能性があるため、%演算子を10進数に使用すると危険です。たとえば、0.4 の代わりに0.40000000000000001を取得し、クエリSELECT 2.0 % 0.400000000000000010.39999999999999996を返します。精度は、私が思うに十分に高くなければならない(18,4)の数値で

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

: たぶん、あなたは全体の項目数を取得するにはCEILING機能を使用する必要がありますか? – Adwaenyth

+0

@Adwaenythそれはあなたの環境に依存します、もしあなたがtonnsで 'amount'を測定するなら - あなたはグラムを使うならば、右側にもっと数字を加えるべきです、私はそれが十分だと思います – Backs

+0

実際にはメートルです。 – Adwaenyth

関連する問題