2016-12-07 9 views
1

数字があります。たとえば、11.61です。私は次の部門を作る:1/11.611/@value2SQLの分周数によって前後に丸め誤差が発生する

SET @value1 = 1/@value2 

結果が

(No column name)  (No column name) 
11.61000000000000079000 0.08613264427217915000 

元と期待値のようになります。

DECLARE @value1 numeric(28, 20) 
     ,@value2 numeric(28, 20) 

SET @value1 = 11.61 
SET @value2 = 1/@value1 

結果は、私はその後、分裂を逆にする

(No column name)  (No column name) 
11.61000000000000000000 0.08613264427217915000 

のように見えますs 11.61である必要があります。しかし、あなたが見ることができるように、結果は11.61000000000000079000です。このエラーはどのようにして回避できますか?

+5

COmputersはすべての可能な実数を表すことはできません。あなたは無限の数です。だから彼らは表現できる最も近いものを使います。これにより、非常に小さな相違が生じます。体重が120ポンドで、120.00000000000000001ポンドではない場合は気になりますか?そうした場合、唯一の選択肢は10進数(28,2)として宣言するか小数点以下2桁に丸めます。 –

+0

も、[this](https://stackoverflow.com/questions/1987452)に関する質問を参照してください。https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html – SeanC

答えて

0

使用CASTCAST(@value1 as decimal(10,2))よう とCAST(@value2 as decimal(10,2)) はそれだけで小数点以下2桁を表示します。