我有一段代码:TSQL数四舍五入问题
IF OBJECT_ID(N'dbo.rounding_testing') IS NOT NULL
DROP FUNCTION dbo.rounding_testing;
GO
CREATE FUNCTION dbo.rounding_testing
(
@value FLOAT,
@digit INT
)
RETURNS FLOAT
BEGIN
DECLARE
@factor FLOAT,
@result FLOAT;
SELECT @factor = POWER(10, @digit);
SELECT @result = FLOOR(@value * @factor + 0.4);
RETURN @result;
END;
GO
SELECT dbo.rounding_testing(5.7456, 3);
SELECT FLOOR(5.7456 * 1000 + 0.4);
的结果是:
5745
5746
我期待2 5746.我试着调试功能,并发现了一些有趣的行为。以下是调试时我在Immediate Window
中做的一些测试。
@factor
1.000000000000000e+003
@result
5.745000000000000e+003
@value
5.745600000000000e+000
@value*@factor
5745.6
@value*@factor+0.4
5746
floor(@value*@factor+0.4)
5745
floor(5746)
5746
任何人都可以帮忙解释结果吗?尤其是以下三行:
@value*@factor+0.4
5746
floor(@value*@factor+0.4)
5745
floor(5746)
5746
你能花时间格式化吗? –
丹尼尔,我对这个频道很陌生。现在好点了吗? –