请问我这个函数的计算结果为什么是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。