2012-05-04 21 views
0

明らかに等しい2つの数値の差を取得しようとすると、ゼロ以外の数値が返されます。SQL Serverでの丸めと値の比較の問題

product_price  min_product_price price_dif 
40,609756097561  40,609756097561   -2,1316282072803E-14 

私がこのにつながるすべてのクエリずに答えるのが難しい質問することができますが、私は

product_priceはストレートERPデータベースから来て、説明しようとするでしょう理解しています。

min_product_priceは、group by句とともに

MIN(ItemSellingPrices.UnitPrice) as min_product_price 

で得られます。この数字は同じではないはずですか?

私はこの種の問題については経験がありませんので、あまりにも基本的な場合はお詫び申し上げます。

+1

浮動小数点数を比較するときは、常にデルタを使用するか、@ w0lf suggestsなどの固定形式を使用する必要があります。 Rudy Velthuisの[this excellent article](http://rvelthuis.de/articles/articles-floats.html)の浮動小数点を読み上げることができます。 –

答えて

2

浮動小数点問題のように見えます。

floatまたはreal列にお金の値を格納する場合は、代わりにdecimal/numericデータ型を使用してみてください。

小数点以下12桁を格納する場合は、たとえばdecimal(18, 12)を使用できます。

+0

実際に私はビューを使用しています。それは同じだろうか? – Mike

+1

は絶対に。ビューで使用されるテーブルのデータ型を変更する必要があります。あなたが小数点以下を使用する必要がある金額を保管/表記するあらゆる場所。 – GolfWolf

+0

テーブルを変更できない場合(たとえば、別のアプリケーションに属している可能性がある場合)、それ以降の操作を実行する前に値を10進データ型に変換することができます – GolfWolf