DECLARE @net_qty DECIMAL(18,10)
DECLARE @rate DECIMAL(18,10)
SET @net_qty=3
SET @rate=95
SELECT CAST( @net_qty/(1-@rate*0.001) AS DECIMAL(18,10))
SELECT 3/(1-95*0.001)
修改后sql
DECLARE @net_qty FLOAT(38)
DECLARE @rate FLOAT(38)
SET @net_qty=3
SET @rate=95
SELECT CAST( @net_qty/(1-@rate*0.001) AS FLOAT(38))
SELECT CAST( 3/(CAST(1 AS FLOAT(38))-95*0.001) AS FLOAT(38))
总结:
以上两个例子说明, 3/(1-95*0.001) 这个计算后由于精度不确定sql默认保留8位小数。再加上cast(1 as float(38))后, 精度识别位38位。算出来就和上面一个计算结果相同了。