SQL自定义函数计算错误

请问我这个函数的计算结果为什么是80
ALTER FUNCTION SBJMJS1(@D1 FLOAT,@WJXS1 FLOAT)
RETURNS FLOAT
AS BEGIN
DECLARE @SBJMJS FLOAT
IF @D1<10
RETURN 40
ELSE
SET @SBJMJS= 40*@WJXS1
RETURN @SBJMJS
END
SELECT DBO.SBJMJS(21,2.1)
2.1的小数位好像没有参与计算

把float换成decimal试试

【以下回答由 GPT 生成】

问题出在函数定义中的参数类型选择错误。在函数定义中使用的是FLOAT类型,而实际传入的参数是小数。在SQL Server中,FLOAT类型不是精确的数值类型,而是近似值类型,它可能会导致计算结果出现不一致的情况。

要解决这个问题,建议将函数定义中的参数类型改为DECIMAL或NUMERIC类型,这是一种精确的数值类型。可以根据需要选择合适的精度和小数位数。

以下是修改后的代码示例:

ALTER FUNCTION SBJMJS1(
  @D1 DECIMAL(10,1),
  @WJXS1 DECIMAL(10,1)
)
RETURNS DECIMAL(10,1)
AS BEGIN
  DECLARE @SBJMJS DECIMAL(10,1)

  IF @D1 < 10
    RETURN 40
  ELSE
    SET @SBJMJS = 40 * @WJXS1

  RETURN @SBJMJS
END
SELECT DBO.SBJMJS1(21,2.1)

这样修改后,函数将正确计算结果为 84.0。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^