四舍五入到小数点后 4 位,但在 MS SQL 服务器中输出显示小数点后 4 位 + 4 个 0

Rounded to 4 decimal places, but output shows 4 decimal places + 4 0s in MS SQL Server

我正在 HackerRank 的 Weather Observation Station 17 工作。 查询STATION中最小的北纬(LAT_N)大于38.7780的西经(LONG_W)。将您的答案四舍五入到小数点后 4 位。

Table:车站 字段:ID、城市、州、LAT_N、LONG_W 其中 LAT_N 是北纬,LONG_W 是西经。

我的代码:

SELECT ROUND(LONG_W,4,0) AS low
FROM STATION
WHERE LAT_N = (SELECT MIN(LAT_N) FROM STATION WHERE LAT_N > 38.7780);

输出: 70.13780000 答案是错误的。我在网上查了这个问题,代码在其他答案中看起来是一样的。我正在使用 MS SQL 服务器。 相同的代码在 MySQL

上运行良好

我就是不会用 ROUND:

SELECT CONVERT(decimal(12,4), LONG_W) AS low
FROM STATION
WHERE LAT_N = (SELECT MIN(LAT_N) FROM STATION WHERE LAT_N > 38.7780);

也更有效率:

SELECT TOP (1) CONVERT(decimal(12,4), LONG_W) AS low
FROM STATION
WHERE LAT_N > 38.7780
ORDER BY LAT_N;

ROUND 函数将 return 与输入相同的数据类型、精度和小数位数:

select round(1.10045001, 4); -- 1.10050000
select round(1.10055001, 4); -- 1.10060000

您需要 CAST(... AS DECIMAL(..., 4)) 才能生成恰好 4 位的小数。此函数将在转换期间使用与 ROUND 相同的算法对值进行舍入:

select cast(1.10045001 as decimal(18, 4)); -- 1.1005
select cast(1.10055001 as decimal(18, 4)); -- 1.1006

女士 SQL

SELECT CAST(LONG_W AS DECIMAL(10, 4))
FROM STATION
WHERE LAT_N = ( SELECT MIN(LAT_N) FROM STATION WHERE LAT_N > 38.7780);