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


222

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

这是我到目前为止的内容:

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

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


3
您正在使用哪个数据库引擎?
杰克

Answers:


378

您能否将结果转换为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

8
奇怪。已经SELECT ROUND(630/60.0, 2);给我10.50
杰克

4
@ u07ch已经使用强制转换时使用round()的目的是什么?
拉姆

16
@Ram这个问题没有指定sql server引擎-这就是为什么我自己强调了round v cast的原因。转换为数字并不会在所有引擎中都进行四舍五入,因此,如果计算出的数字为10.809,您将得到10.80而不是所要求的问题10.81。
u07ch 2014年

1
@ u07ch感谢您的详细答复。它帮助了我。
拉姆(Ram)2014年

8
cast(630/60.0 as numeric(36,2))10,50
上午

78

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

SELECT FORMAT(Minutes/60.0, 'N2')

(仅供进一步阅读...)


2
请注意,这也引入了数千个分隔符,例如1,757.47
8128年

10
使用'0.00'而不是'N2'给出两位小数,而没有千位分隔符。
8128年

2
似乎转换为字符串?拧紧顺序。
blissweb

2
@blissweb应该没有问题,因为您可以在原始列上进行排序,而不是Format函数的输出。
马滕

25

您可以使用

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


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

2
欢迎使用Stack Overflow!感谢您提供的代码段,它们可能会提供一些有限的即时帮助。通过描述为什么这是解决问题的一个很好的方法,适当的解释将大大提高其长期价值,并且对于将来有其他类似问题的读者来说,它将更加有用。请编辑您的答案以添加一些解释,包括您所做的假设。
sepehr

4
DECLARE @porcentaje FLOAT

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

SELECT @porcentaje

3

可与postgresql和Oracle一起使用

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

3

以下查询既有用又简单-

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

输出为0.25。


3

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

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

select 1548/100 
15.00000

select 1548/100.0
15.4800

0

3

将您的电话号码转换为NumericDecimal

用以下内容替换查​​询。

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功能可节省少量费用,但可节省少量费用。



2

作为以下答案的补充,在公式中使用INT或非十进制数据类型时,请记住将值乘以1并选择所需的小数位数。

即- TotalPackages是an INT,所以分母TotalContainers,但我希望我的结果最多有6个小数位。

从而:

((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)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.