2017-06-12 7 views
0

したがって、同じ長さの合計関数の結果である2つの同一の値があります(丸めが行われていません)。 (更新、データ型がfloatである)SQL長い10進数値の比較

VALUE_1 = 29.9539194336501 _2 = 29.9539194336501

は私がいる問題は、私はVALUE_1 = VALUE_2のためにIF文を実行するとき、それはアップとしてFALSE来ています。

VALUE_1:

SELECT SUM([INVN_DOL])/SUM([AVG_DLY_SLS_LST_35_DYS]) end as DSO 
FROM TABLE A 

_2:彼らは正確に等しくないかもしれないと私は、彼らが一致しないのでTRUE値を取得するために何ができるのか、なぜ

SELECT SUM ([Total_Inventory_Val])/SUM ([Daily_Independent_Demand]) 
FROM TABLE B 

任意のアイデア?事前に

おかげで、あなたがここに持っている問題は、あなたはあなたがなぜある設計により精度の高いレベルでやや不正確になりますfloat内に保持された計算値を、使用していることである

+1

実際に同じタイプであり、等しいのですか? 'varbinary(8)'にキャストするとどうなりますか? (私はあなたが[それは原則としてどのように動作するのか理解していると思う](https://stackoverflow.com/q/588004/11683)、[ε(https://stackoverflow.com/questions/588004)/is-floating-point-math-broken#comment3831071_588014))。 – GSerg

+1

ヒント:GSergによるコメントに追加するには、['SQL_Variant_Property()'](https://docs.microsoft.com/en-us/sql/t-sql/functions/sql-variant-property- transact-sql)を使用して、データ型および関連するパラメータを表示します。式の精度とスケールたとえば、次のようにします。 'select SQL_Variant_Property((SELECT SUM([Total_Inventory_Val])/ SUM([Daily_Independent_Demand]) FROM TABLE B)、 'BaseType');'。 – HABO

答えて

2

あなたの不一致を得る。

decimalと定義されたprecisionscaleのデータ型を使用すると、値と計算結果が保持され、一貫した結果が得られます。

0
  • あなたは小数点 それとも
  • ABSを試してみて、それがうまくいくかどうか確認を制限するために使用ROUNDを作ることができます。