2012-04-30 86 views
148

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

这是我到目前为止有:

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

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

+2

的数据库引擎您使用的? –

+0

如果T-SQL,这是一个重复的http://stackoverflow.com/questions/3190688/t-sql-round-to-decimal-places –

回答

267

难道你不能把你的结果作为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 
+4

奇怪。 'SELECT ROUND(630/60.0,2);'已经给我'10.50'。 –

+2

@ u07ch当你已经在使用cast时,使用round()的目的是什么? – Ram

+8

@Ram问题没有指定sql服务器引擎 - 这就是为什么我突出显示了自己投下的一轮v。转换为数字不会在所有引擎中舍入,因此如果计算的数字是10.809,您将得到10.80而不是10.81所需的问题。 – u07ch

49

与SQL Server 2012中,你可以使用内置的format function

SELECT FORMAT(Minutes/60.0, 'N2') 

(只是为了进一步阅读...)

+1

注意这里介绍数千个分隔符,例如'1,757.47' – 8128

+3

使用'0.00'而不是'N2'给出了两位小数,并且没有千位分隔符。 – 8128

+0

它是最终的。 – Sathiyamoorthy

0

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

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 
+8

您是否阅读过接受的答案? –

1

工作在两个与PostgreSQL和甲骨文

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

可以使用

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

下面的查询是有用的,简单 -

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

给出输出为0.25。

6
Declare @number float = 35.44987665; 
Select round(@number,2) 
+3

考虑在答案中加入一点解释。 –

+0

如果是小数点(10,6),会发生什么情况? –

2
DECLARE @porcentaje FLOAT 

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

SELECT @porcentaje 
0

你面额使用什么都应该是十进制,例如1548/100会给15.00

如果我们在我们的例子中100.0更换100我们会得到15.48

select 1548/100 
15.00000 

select 1548/100.0 
15.4800 

0 
-1

我发现STR功能是实现这一点最简洁的方法。

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

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