繁体   English   中英

四舍五入到小数点后4位,但是output在MS SQL Server中显示小数点后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 位。

表:STATION 字段:ID、CITY、STATE、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);

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

ROUND函数将返回与输入相同的数据类型、精度和比例:

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

我只是不会使用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;

对于 MS 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);

微软 SQL 服务器:

SELECT TOP 1 CAST(LONG_W AS DECIMAL(10,4)) 从 LAT_N > 38.7780 的车站按 LAT_N ASC 排序

SELECT FORMAT(round(min(LAT_N),4),'F4')
FROM STATION
WHERE LAT_N > 38.7780;


Your Output (stdout)
38.8526

实际上这个问题有点令人困惑,但它仍然具有我在得到正确答案后理解的一些含义。

LAT_N 的条件令人困惑,这意味着 ***“LAT_N 是最小的一个,同时 LAT_N 大于 38.7780”***

select round(LONG_W,4) from STATION where LAT_N = (SELECT MIN(LAT_N) FROM STATION WHERE LAT_N > 38.7780);

标准输出:70.1378

这应该工作。 有多个 lat_n 值大于 38.7780。 但是,我们想要其中最小的一个,以及对应的long_w。 因此,要获得最小的 lat_n,请按 lat_n 对结果进行排序并将限制设置为 1。这将选取最小的 lat_n 值。

SELECT ROUND(long_w, 4)
FROM station
WHERE lat_n > 38.7780
ORDER BY lat_n
LIMIT 1;
SELECT CAST(ROUND(LONG_W,4) AS DECIMAL(10, 4)) 
FROM STATION WHERE LAT_N = ( SELECT MIN(LAT_N) FROM STATION WHERE LAT_N > 38.7780);

这会工作..

我的代码在 MYSQL 上成功运行

select round (LONG_W,4)
from STATION
where LAT_N>38.7780
order by LAT_N asc
limit 1;

这是 MYSQL 中此问题的正确答案

select round (LAT_N,4) from STATION where LAT_N>38.7780 order by LAT_N asc limit 1;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM