2017-06-12 74 views
0

因此,我有兩個相同的值,它們是具有完全相同長度的和函數的結果(不進行舍入)。 (更新,數據類型爲float)SQL長十進制值比較

_1 = 29.9539194336501 _2 = 29.9539194336501

我遇到的問題是,當我爲_1 = VALUE_2做一個IF語句,它出現爲FALSE。

_1:

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

VALUE_2:

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

任何想法,爲什麼他們可能不完全平等的,我能做些什麼,以獲得真正的價值,因爲它們匹配?

在此先感謝

+1

你確定他們實際上是相同的類型,是平等的嗎?當你將它們投射到varbinary(8)'時會發生什麼? (我假設你理解[原理上是如何工作的](https://stackoverflow.com/q/588004/11683)並且不想使用[an epsilon](https://stackoverflow.com/questions/588004/IS-浮點數學破碎#comment3831071_588014))。 – GSerg

+1

提示:要添加到GSerg的評論,您可以使用['SQL_Variant_Property()'](https://docs.microsoft.com/zh-cn/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

您在這裏的問題是,你使用的是舉行float內的計算值,這將被設計在較高水平的精確度稍微不精確的,這就是爲什麼你得到你的不匹配。

使用數據類型如decimal與定義的precisionscale來保存您的值和計算結果,你應該得到一致的結果。

0
  • 您可以使用ROUND限制小數點 或者
  • 嘗試ABS,看看是否可行了。