我有一段代碼: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
你能花時間格式化嗎? –
丹尼爾,我對這個頻道很陌生。現在好點了嗎? –