SQL 中四舍五入到小数点后两位

问题描述 投票:0回答:18

我需要将分钟转换为小时,四舍五入到小数点后两位。我还需要只显示小数点后最多两位数字。因此,如果我的分钟数是 650,那么小时数应该是 10.83。

这是我到目前为止所拥有的:

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

但在这种情况下,如果我的分钟是 630,那么小时就是 10.5000000。但我希望它仅为 10.50(四舍五入后)。我如何实现这一目标?

sql rounding
18个回答
461
投票

您可以将结果投射为

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

100
投票

使用 SQL Server 2012,您可以使用内置的 format 函数:

SELECT FORMAT(Minutes/60.0, 'N2')

36
投票

您可以使用:

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

在 SQL Server 中


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

14
投票
CAST(QuantityLevel AS NUMERIC(18,2))

6
投票

将您的号码转换为

Numeric
Decimal

将您的查询替换为以下内容。

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
功能可以节省少量资金,但小额节省会成倍增加。 Numeric 和 Decimal 参数 (38, 2) 和 (65, 2) 表示要使用的最大精度级别和小数位数。


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

4
投票

以下查询很有用且简单-

declare @floatExchRate float;
set @floatExchRate=(select convert(decimal(10, 2), 0.2548712))
select  @floatExchRate

输出为 0.25。


3
投票

这适用于 PostgreSQL 和 Oracle:

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

3
投票

无论您使用什么面额,都应该是小数。例如,

1548/100
将给出
15.00

如果我们在示例中将

100
替换为
100.0
那么我们将得到
15.48

select 1548/100
15.00000

select 1548/100.0
15.4800

0

2
投票

作为以下答案的补充,在公式中使用 INT 或非小数数据类型时,请记住将值乘以 1 和您喜欢的小数位数。

即-

TotalPackages
INT
,分母
TotalContainers
也是,但我希望结果最多有六位小数。

因此:

((m.TotalPackages * 1.000000) / m.TotalContainers) AS Packages,

1
投票

以下片段可能对您有帮助:

select SUBSTR(ENDDTTM,1, 9), extract(DAY FROM (ENDDTTM)), ENDDTTM, BEGINDTTM,  (ENDDTTM - BEGINDTTM),substr(BEGINDTTM, 1,15), substr((ENDDTTM - BEGINDTTM), 12, 8),
round((substr((ENDDTTM - BEGINDTTM), 12, 2)* 3600 + substr((ENDDTTM - BEGINDTTM), 15, 2)*60 +  substr((ENDDTTM - BEGINDTTM), 18, 2)),2) as seconds,
round((substr((ENDDTTM - BEGINDTTM), 12, 2)* 60 + substr((ENDDTTM - BEGINDTTM), 15, 2) +  substr((ENDDTTM - BEGINDTTM), 18, 2)/60 ), 2)as minutes,
round((substr((ENDDTTM - BEGINDTTM), 12, 2) + substr((ENDDTTM - BEGINDTTM), 15, 2)/60 +  substr((ENDDTTM - BEGINDTTM), 18, 2)/3600 ),2)  as hours

0
投票

我发现 STR 函数是完成此任务的最简洁的方法。

SELECT STR(ceiling(123.415432875), 6, 2)

0
投票

向上舍入至小数点后 x 位:

SET @Result = CEILING(@Value * POWER(10, @Decimals)) / POWER(10, @Decimals)

其中 @Value 是要舍入的项目的值,@Decimals 是小数位数,例如本例中为两位。


0
投票

这对我有用:

SELECT FORMAT(Minutes/60.0, '0.00')

0
投票

在 Redshift 环境中对我有用的方法如下,引用前 2 个答案:

cast(round(630/60.0,2) as numeric(36,2))

0
投票

这对我有用:

SELECT CAST((630/60.0) AS numeric(16,2)) FROM ... 
© www.soinside.com 2019 - 2024. All rights reserved.