【发布时间】:2012-12-27 18:09:40
【问题描述】:
我有这个数字 0.581183781439,我需要对数字 0.582 进行四舍五入
我正在尝试
SELECT ROUND (0.581183781439, 3)
-------------------------------
0.581000000000
ROUND 函数有用吗?
【问题讨论】:
标签: sql-server tsql rounding
我有这个数字 0.581183781439,我需要对数字 0.582 进行四舍五入
我正在尝试
SELECT ROUND (0.581183781439, 3)
-------------------------------
0.581000000000
ROUND 函数有用吗?
【问题讨论】:
标签: sql-server tsql rounding
DECLARE @Test TABLE (Col NUMERIC(38,12));
INSERT @Test (Col)
SELECT 0.581183781439
UNION ALL
SELECT 0.5815
UNION ALL
SELECT 0.581883781439
UNION ALL
SELECT -0.581883781439;
SELECT Col AS [Col],
ROUND(Col, 3) AS StandardRounding_3decimals,
ROUND(Col, 3, 1) AS Truncation_3decimals,
FLOOR(Col*1000)/1000 AS RoundDown_3decimals,
CEILING(Col*1000)/1000 AS RoundUp_3decimals
FROM @Test;
结果:
Col StandardRounding_3decimals Truncation_3decimals RoundDown_3decimals RoundUp_3decimals
--------------- -------------------------- -------------------- ------------------- -----------------
0.581183781439 0.581000000000 0.581000000000 0.581000 0.582000
0.581500000000 0.582000000000 0.581000000000 0.581000 0.582000
0.581883781439 0.582000000000 0.581000000000 0.581000 0.582000
-0.581883781439 -0.582000000000 -0.581000000000 -0.582000 -0.581000
【讨论】:
也许你需要这个?
SELECT ROUND(0.581183781439, 3,1) + .001
但正确的舍入是0.581。
【讨论】:
我们可以编写一个 T-SQL 函数来四舍五入任意小数位。
CREATE FUNCTION RoundUp (@value float, @places int) RETURNS float
AS
BEGIN
RETURN SELECT CEILING(@value * POWER(10, @places)) / POWER(10, @places)
END
GO
SELECT Result = dbo.RoundUp(0.581183781439, 3)
结果
0.582
【讨论】:
加上一个半值并使用正常的回合会得到正确的结果。
SELECT ROUND (0.581183781439 + .0005, 3)
奖励:减去一半的值,它会向下舍入。
编辑:实际上,当小数点后第三位为零时,这与上面的答案具有相同的缺陷。
【讨论】: