我有分钟 140.小时和分钟变为2:20。
在这种情况下,我希望得到2.33。
我尝试了什么:
select cast(140/60 as varchar(8)) + '.' + cast((140 % 60) as varchar(8))
输出: 2.20
select 140/60
输出:2
select cast(140/60 as decimal(5,2))
输出:2.00
我缺少什么?
如何将140分钟转换为十进制小时数?
答案 0 :(得分:2)
对于快速评论感到抱歉,我会尝试更清楚地解释一下这个问题。
默认情况下,Sql会“认为”你的红利和& divisor是INT数据类型,这就是它返回2的原因。
如果您指定带小数的数字,请执行以下操作:
select (140.00/60.00)
现在数据类型不再是int,结果是:2.3333333
因此,您需要将其中一种数据类型转换为float,decimal,numeric(n,n)以获得准确的结果:
select cast(140 as decimal(5, 2)) / cast(60 as decimal(5, 2))
但你仍然可以只转换股息或除数,如下所示:
select 140 / cast(60 as decimal(5, 2))
或
select cast(140 as decimal(5, 2)) / 60
它们都给出了相同的结果,因为结果类型是具有更高优先级的参数的数据类型,在这种情况下,decimal的优先级高于int
你可以在这里阅读更多内容:
答案 1 :(得分:1)
试试这个
Select convert(decimal(5,2),convert(float,140)/60)
或
Select cast(140.00/60 as decimal(5,2))