如何让 CAST 与除法一起正常工作
How to get CAST working correctly with division
我正在使用 SSMS 2014。
我的示例代码如下:
select name
,family
,group
,mcount
,icount
,(cast(icount as demical(10,2)) / cast(mcount as decimal(10,2))) as per_unit
from ( select distinct
mc.name
,mc.family
,mc.group
,sum(mc.mcount) over (partition by mc.name) as mcount
,sum(ic.icount) over (partition by ic.name) as icount
from mc
join ic
on ic.num1 = mc.num1) as a
order by mcount desc
我的每单位列的第一条记录应该除以 76 / 50。这应该 = 1.52,但是,它 returns 1.5200000000000。第二条记录除以 52/28 和 returns 1.8571428571428.
我正在寻找小数点后两位。我读到 cast as decimal(10,2) 但这似乎不起作用。
我做错了什么??
谢谢
你必须对除法的结果进行投射。
改变这个
(cast(icount as demical(10,2)) / cast(mcount as decimal(10,2))) as per_unit
至此
cast(icount / mcount as decimal(10,2)) as per_unit
如果 icount
和 mcount
是整数,则保留现有的转换。
将您的部门更改为:
cast((cast(icount as demical(10,2)) / cast(mcount as decimal(10,2))) as decimal(10,2)) as per_unit
或者理想情况下,假设您的 icount
和 mcount
也是 decimal
值:
cast(icount / mcount as decimal(10,2)) as per_unit
再投一次就能得到想要的结果
cast((cast(icount as demical(10,2)) / cast(mcount as decimal(10,2))) as Decimal(10,2)) per_unit
我正在使用 SSMS 2014。
我的示例代码如下:
select name
,family
,group
,mcount
,icount
,(cast(icount as demical(10,2)) / cast(mcount as decimal(10,2))) as per_unit
from ( select distinct
mc.name
,mc.family
,mc.group
,sum(mc.mcount) over (partition by mc.name) as mcount
,sum(ic.icount) over (partition by ic.name) as icount
from mc
join ic
on ic.num1 = mc.num1) as a
order by mcount desc
我的每单位列的第一条记录应该除以 76 / 50。这应该 = 1.52,但是,它 returns 1.5200000000000。第二条记录除以 52/28 和 returns 1.8571428571428.
我正在寻找小数点后两位。我读到 cast as decimal(10,2) 但这似乎不起作用。
我做错了什么?? 谢谢
你必须对除法的结果进行投射。
改变这个
(cast(icount as demical(10,2)) / cast(mcount as decimal(10,2))) as per_unit
至此
cast(icount / mcount as decimal(10,2)) as per_unit
如果 icount
和 mcount
是整数,则保留现有的转换。
将您的部门更改为:
cast((cast(icount as demical(10,2)) / cast(mcount as decimal(10,2))) as decimal(10,2)) as per_unit
或者理想情况下,假设您的 icount
和 mcount
也是 decimal
值:
cast(icount / mcount as decimal(10,2)) as per_unit
再投一次就能得到想要的结果
cast((cast(icount as demical(10,2)) / cast(mcount as decimal(10,2))) as Decimal(10,2)) per_unit