Tsql 当结果非常小时,避免四舍五入到0

Tsql 当结果非常小时,避免四舍五入到0,tsql,floating-point,decimal,rounding,Tsql,Floating Point,Decimal,Rounding,我已经搜索过了,但是没有找到任何东西,我希望这不是一个双重问题。 我在TSQL中做一个公式,如下所示: @Temp = SQRT((((@Base1 - 1) * (@StDev1 * @StDev1)) + ((@AvgBase - 1) * (@AvgStDev * @AvgStDev))) * ((1 / @Base1) + (1 / @AvgBase)) / (@Base1 + @AvgBase - 2)) 但它总是给我一个0。 @

我已经搜索过了,但是没有找到任何东西,我希望这不是一个双重问题。 我在TSQL中做一个公式,如下所示:

@Temp = SQRT((((@Base1 - 1) * (@StDev1 * @StDev1)) 
        + ((@AvgBase - 1) * (@AvgStDev * @AvgStDev))) 
        * ((1 / @Base1) + (1 / @AvgBase)) 
        / (@Base1 + @AvgBase - 2))
但它总是给我一个0。
@Base1
@AvgBase
int
,其余参数是
float
,但我也尝试了
十进制(15,15)
。 我还尝试用函数
POWER()
更改自乘法,但唯一无法解决的问题是这一部分:
(1/@Base1)+(1/@AvgBase)
,因为
@Base1
@AvgBase
太大了,计算结果是00001。。。还有更多的数字。如何强制引擎不将结果四舍五入为0?谢谢


编辑:我将
@AvgBase
@Base1
更改为
float
类型,解决了这个问题。我猜结果
1/@param
,带有
@param
->
int
会给你一个四舍五入的结果,当你去铸造它或其他什么的时候,你无论如何都在处理一个四舍五入的结果。

你试过创建一个
@INVBase1=(1/@Base1)
?这是否也将四舍五入为0?使用这个新变量的数据格式时会发生什么

你试过了吗

/ ((@Base1) + (@AvgBase)) 
而不是

* ((1 / @Base1) + (1 / @AvgBase)) 

我尝试了支持参数(实际上我正在处理这些参数,但为了解释问题,我不得不分享整个公式),结果是一样的。第二个选项是不正确的,因为a/(b+c)与a*((1/b)+(1/c))不同。那么你需要试试a/b+a/c。我认为问题在于base1和avg base是整数。1也将被铸造为int。因此,您将有一个返回整数的整数计算。但是您需要一个数值。那么*CAST((1/@Base1)+(1/@AvgBase))作为数字(20,18))呢?