简单举个例子,常量12.345在常态下会被解析并转换为numeric(5, 3)的数值类型,即使用最小精度5和最小小数位数3;而在运算除法时,比如12.345/2则会被解析并转换为float(24),即最小精度的近似数值类型。
小数转为字符串
相比cast(float_expression as float(24/53)),使用str()函数更能够有效控制近似数值的小数位数,因为str()函数获取的是近似数值。
str(float_expression [ , length [ , decimal ] ])
str()函数可以接受length、decimal两个参数,皆是可选的。
length是小数的总位数,包含正负符号,小数点,小数点左边和右边数字个数之和; decimal是小数位的数量(小数点右边数字个数),小数位最大为16位,不能超过16,否则,会被截断为16位。如果小数位没有decimal多,那么右边补0。 返回值是varchar类型。将decimal常量转换为varchar类型:
select str(123.45, 10, 2); -- 123.45
将float表达式的值转换为varchar类型(位数不足自动补0):
select str(1.0/3, 10, 8); -- 0.33333300
对小数常量转换为varchar类型,减少小数位的数量,由2位减少为1位(会自动进行四舍五入运算):
select str(123.45, 6, 1); -- 123.5
使用函数str或cast将float和decimal强制转换为varchar类型时,返回的数值可能是不相同的:
select str(56.64564684439527, 38, 20); -- 56.64564684438742000000 select cast(56.64564684439527 as varchar(100)); -- 56.64564684439527
这是因为两种函数的处理方式的不同导致的:str()函数会对小数数值先取近似值;而cast()函数则是返回与原始值数据类型相同的值(decimal返回精确值,float返回近似值)。
以上就是详细分析sqlserver中的小数类型(float和decimal)的详细内容,更多关于sqlserver 小数类型的资料请关注易采站长站其它相关文章!










