255

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

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

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

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

4

15 回答 15

425

您可以将结果转换为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
于 2012-04-30T07:51:00.267 回答
89

使用SQL Server 2012,您可以使用内置格式功能

SELECT FORMAT(Minutes/60.0, 'N2')
于 2012-04-30T07:55:49.937 回答
27

您可以使用:

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

在 SQL Server 中

于 2014-08-23T12:15:37.470 回答
12
Declare @number float = 35.44987665;
Select round(@number,2) 
于 2016-05-04T08:46:57.743 回答
10
CAST(QuantityLevel AS NUMERIC(18,2))
于 2018-10-25T13:24:34.433 回答
4

以下查询有用且简单-

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

输出为 0.25。

于 2015-06-30T08:48:00.013 回答
4
DECLARE @porcentaje FLOAT

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

SELECT @porcentaje
于 2016-06-30T18:33:29.767 回答
4

试试这个:

    SELECT CAST(ROUND([Amount 1]/60,2) AS DECIMAL(10,2)) as TOTAL
于 2017-12-01T13:24:37.997 回答
4

将您的号码转换为 aNumericDecimal

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

SQL 服务器

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) 的参数表示要使用的最大精度级别和小数位数。

于 2018-05-01T09:53:21.473 回答
3

这适用于PostgreSQL和 Oracle:

SELECT ename, sal, round(((sal * .15 + comm) /12),2)
FROM emp where job = 'SALESMAN'
于 2013-12-13T16:55:49.350 回答
3

无论您在面额中使用什么,都应该是十进制的。例如,1548/100会给15.00.

如果我们在我们的示例中替换100100.0,那么我们将得到15.48

select 1548/100
15.00000

select 1548/100.0
15.4800

0
于 2017-02-10T05:58:25.887 回答
2

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

即 -TotalPackagesINT,分母也是 TotalContainers,但我希望我的结果最多有六位小数。

因此:

((m.TotalPackages * 1.000000) / m.TotalContainers) AS Packages,
于 2018-10-12T03:49:12.383 回答
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
于 2012-10-06T17:51:41.823 回答
0

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

SELECT STR(ceiling(123.415432875), 6, 2)
于 2017-05-08T08:29:32.680 回答
0

四舍五入到 x 位小数:

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

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

于 2021-03-29T00:46:56.750 回答