有个计算sum(940/12*0.4+180/2*0.6)用计算器计算得85.332,而mssql计算select sum(940/12*0.4+180/2*0.6)得85.2,???不知怎么回事,想保留小数点后两位85.33,如何做?谢谢!
这个问题第1个回答:
cast(sum(xxxxx) as decimal(10,2))
这个问题第2个回答:
select round(sum(940/12*0.4+180/2*0.6),2)
这个问题第3个回答:
大同小异
这个问题第4个回答:
select cast(sum(940/12*0.4+180/2*0.6) as decimal(15,2))
这个问题第5个回答:
谢谢!
xuam,liangck的还是得85.2!?
这个问题第6个回答:
select cast(sum(940.00/12*0.4 +180/2*0.6) as decimal(10,2))
这个问题第7个回答:
关键是得数不对的,应该是85.33333的,而不是85.2
这个问题第8个回答:
select cast(sum(940.00/12*0.4 +180/2*0.6) as decimal(10,2))
这个问题第9个回答:
6楼的对了,为什么940.00就可以了?
在程序中940是计算出来的,如何把940变成940.00?
这个问题第10个回答:
第一个出现的值是要float才行.
SQL code
1.
sum(cast(940 as money)/12*0.4+180/2*0.6)
2.
sum(940.0/12*0.4+180/2*0.6)
这个问题第11个回答:
ps: 为什么要加sum……
这个问题第12个回答:
楼主朋友,SQL在进行数字计算时,总会先去当前数字有效位数最大的一个来作为结果的最恰当近似.您给出的算是通过计算器的结果和通过SQL的结果有误差出现在2个地方,就是你给出的算是中给出最多一位小数的数字,那么SQL就默认中间结果和最终结果都近似保留1位小数,2次舍入产生了85.3333和85.2的不同结果.只要您在SQL中送入一个(且一个足够)与期望结果具有相同位数的小数就能使结果也具有这个精度,中间计算过程也保持这个精度.就像6楼仁兄的那种做法一样,但不局限与940.00,也可以是别的数字.
如果sum函数中的几个数字是通过前台程序传入的,那么可以在传入钱在前台用一个round()函数转化一下就可以了.如果你用的开发语言没有round()这个函数,那么可以查阅一下您所用的开发语言的使用手册,相应的四舍五入函数的语法就可以了.round()函数的语法是round(四舍五入数值类型,保留位数),如果保留位数是0,那么就近似成整数.
以上解释希望您能明白,祝楼主开心.
这个问题第13个回答:
谢谢各位!
特别是acupofnescafe ,讲得如此详细。