selectROUND(0.9995,3)--会出错selectROUND(3.9995,3)--这样写就不会出错,为什么?... select ROUND(0.9995,3) --会出错
select ROUND(3.9995,3) --这样写就不会出错,为什么? 刚测试过,数据库会默认将:
Column_name Type Prec Scale
0.9995 numeric 4 4
3.9995 numeric 5 4
简单说就是
0.9995对应的数据类型和长度是 numeric(4,4) 表示:一个长度为4,小数位数也为4的小数,也就是没有整数位
而 3.9995对应的数据类型和长度却是 numeric(5,4) 标识:一个长度为5,小数位数也为4的小数,也就是没有整数位为1位
所以这么一说,你就该知道 ROUND(0.9995,3)=1 生成了一个有1位整数的数,所以相对于他原来的字段类型他已经溢出了,由此我们也可以推断出 select ROUND(9.9995,3) 肯定也是溢出了的,要解决这个问题,就需要指定字段类型,指定不了那么我们就给他转换类型
select ROUND(cast(0.9995 as numeric(5,4)),3) 就会显示正常的 1.0000 了