在SQL中保留两位小数

280

我需要把分钟转换成小时并保留两位小数,同时只显示小数点后最多两个数字。例如,如果有650分钟,则小时应为10.83。

下面是我的代码:

Select round(Minutes/60.0,2) from ....

但在这种情况下,如果我的分钟数是630,小时数是10.5000000。但我只想将其舍入为10.50(保留两位小数)。我该如何实现?


4
你正在使用哪种数据库引擎? - Ja͢ck
3
如果涉及T-SQL,这是一个重复的问题,请参考https://dev59.com/Gk7Sa4cB1Zd3GeqP7eW1。 - Cees Timmerman
18个回答

467
你可以将结果转换为 numeric(x,2),其中 x <= 38
select
    round(630/60.0,2),
    cast(round(630/60.0,2) as numeric(36,2))

返回

10.500000    10.50

11
奇怪,SELECT ROUND(630/60.0, 2); 已经给出了 10.50 - Ja͢ck
5
在使用强制类型转换时,为什么还要使用round()函数? - Ram
20
问题没有指定 SQL Server 引擎,这就是为什么我突出强调了 round 和 cast。在某些引擎中,转换为数字并不会进行四舍五入,所以如果计算的数字是 10.809,你将得到 10.80 而不是问题需要的 10.81。 - u07ch
9
cast(630/60.0 as numeric(36,2))足够10.50 - MrHIDEn
2
在 MS SQL 中,cast (150.755555 as numeric (16,2)); 将返回 150.76 - Bino
显示剩余2条评论

101

2
请注意,这也引入了千位分隔符,例如 1,757.47 - 8128
15
使用“0.00”而不是“N2”可以保留两位小数,但不包括千位分隔符。 - 8128
3
似乎将其转换为字符串?这会破坏排序。 - blissweb
2
@blissweb不应该是问题,因为您可以按照原始列而不是Format函数的输出进行排序。 - Matten

37

你可以使用:

select cast((630/60.0) as decimal(16,2))

在SQL Server中


至少在DB2上,这不会四舍五入结果。 - not2savvy
这是一个大胆的说法。它被测试在什么上面了? - Peter Mortensen
decimal(16,2)并不限制小数位数为2。 - julian joseph
1
@julianjoseph 在SQL-Server中是可以的。 - bautista

17
Declare @number float = 35.44987665;
Select round(@number,2) 

8
请考虑在您的答案中添加一些解释。 - Olivier De Meulder
3
如果出现十进制数(10,6),会发生什么? - Arijit Mukherjee
3
在MS SQL Server中,这将产生所讨论的确切问题。输出将为35.44000000。 - SendETHToThisAddress

15
CAST(QuantityLevel AS NUMERIC(18,2))

7
欢迎来到Stack Overflow!感谢您提供这段代码片段,它可能会提供一些有限的、即时的帮助。一个适当的解释会大大提高其长期价值,描述为什么这是一个好的问题解决方案,并且会使其对未来读者有其他类似问题的更有用。请编辑您的答案以添加一些解释,包括您所做的假设。 - sepehr
很好,这个回答到目前为止应该是最好的之一。为什么我这么说呢... - Regime Evangelista Lesmoras

6
将您的数字转换为 NumericDecimal
请使用以下查询替换原有查询。 SQL Server
Select Convert(Numeric(38, 2), Minutes/60.0) from ....

MySQL:

Select Convert(Minutes/60.0, Decimal(65, 2)) from ....
Cast函数是Convert函数的一个包装器。由于SQL是一种解释性语言,因此尽管这两个函数产生相同的结果,在Cast函数中仍然有略微更多的后台工作。
使用Convert函数可以节约一点点,但这些小的节省会逐渐增加。对于数字和小数的参数(38, 2)和(65, 2)表示要使用的最大精度级别和小数位数。

1
感谢您作为唯一一个提供SQL Server和MySQL解决方案,并且提供了解释的人。 - SendETHToThisAddress

4
以下查询非常有用且简单 -
declare @floatExchRate float;
set @floatExchRate=(select convert(decimal(10, 2), 0.2548712))
select  @floatExchRate

输出结果为0.25。

它是在什么上进行测试的? - Peter Mortensen
@Peter Mortensen,关于MS SQL SERVER - ShaileshDev

4
DECLARE @porcentaje FLOAT

SET @porcentaje = (CONVERT(DECIMAL,ABS(8700)) * 100) / CONVERT(DECIMAL,ABS(37020))

SELECT @porcentaje

4

试试这个:

    SELECT CAST(ROUND([Amount 1]/60,2) AS DECIMAL(10,2)) as TOTAL

3

这适用于PostgreSQL和Oracle:

SELECT ename, sal, round(((sal * .15 + comm) /12),2)
FROM emp where job = 'SALESMAN'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接