为什么要*1.呢?不可以直接/100吗?
这实际上是一种比较便捷的写法,先看一个例子:
select cast(5/100 as decimal(18,2))
这个执行得到的结果是是 0.00,原因是因为整型计算,所以5/100=0,然后再转换,你再执行下面的例子:
select cast(5*1./100 as decimal(18,2))
这个得到的结果是0.05,原因是先做的5*1.的操作时将值转换为了浮点型,避免了计算精度丢失的问题,是一种常见的利用语言自身机制的取巧写法。
没什么区别
有用,当 a.price 为整数时,比如值为100时, 100/100 后 as decimal 会报错。
100.0/100 = 1.0 as decimal 就可以。
在c#中也这样干过,SQL中应该也是类似的作用。