研发案例 SQL Server 小数类型(float 和 decimal) 来源: 发表时间: 2022-06-28 来源:火狐体育最新官网登录入口 作者:火狐体育app

  float是近似数值,存在精度缺失;decimal是精确数值,不存在精度损失。当数值不容许精度丢失时,使用decimal数据类型存储数据。在计算小数的除法时,SQL Server 内部隐式升级数据类型,根据小数数值的数据类型,就近向float(24) 或float(53)转换。

  其中n是以科学计数法存储浮点数尾数的位数,所以决定了精度和存储大小。 若是指定了n,则它必须是介于1和53之间的值,n的缺省值是53。app

  decimal不存在精度损失,数据类型decimal(p,s)须要分别指定小数的最大位数(p)和小数位的数量(s):

  p (precision) :指定小数的最大位数,小数点的左侧和右侧的数字的总数量不能超过p,p的取值范围是从1到38,默认值为18。

  s (scale):指定在小数点右侧的小数位数,p-s是小数点左边的最大位数。s必须是从0到p的值,只有在指定了精度的状况下才能指定s,s的默认值是0,所以,0 = s = p。

  decimal 数据类型的最大精度为 38,这意味着,decimal 数据类型最多能够存储 38位数字,全部这些数字都可位于小数点后面。decimal 数据类型存储精确的数字表示形式,没有近似值。

  小数的除法是近似计算,必须把小数的类型提高为float类型。小数常量的默认数据类型是decimal,float的优先级比decimal高。

  在Transact-SQL语句中,具备小数点的常量会自动转换为decimal,并使用必需的最小精度和小数位数。 例如,将常量12.345转换为小数类型,decimal(5,3),即精度为5,小数位为3。

  默认状况下,SQL Server将小数常量做为decimal 数据类型,在计算小数的除法时,就近进行数据类型的升级,转换为float(24)或float(53) 数据类型。

  在 Transact-SQL 语句中,小数数值的常量自动转换为 decimal 数据类型,在转换时,使用最小的精度和小数位数。例如,常量 12.345 被转换为numeric值,其精度为 5,小数位为 3。

  1.0/3 默认转换为float(24) 类型,所以只有6位小数,小于decimal 参数的8位,右边补两个0。

  4,在将float和decimal转换为varchar类型时,使用函数str或cast强制转换,返回的数值多是不相同

  字段str_dt和str_df的值是不相同的,str函数首先对这两个小数数值取近似值,使用cast强制转换,对于decimal,返回的是精确值,对于float,返回的是近似值。

上一篇:数值小数数据类型SQL 下一篇:SQL哪些数据类型能带小数又能计算的?
关注我们
©2022 火狐体育最新登录网址_官网app入口 京公网安备110177777720125 火狐体育最新登录网址|火狐体育app