declare @abc float
set @abc=CAST(123123656 as decimal(38,3))
print @abc
你看这样行不行。
mysql 数据库float,int,bigint,double区别
单精度浮点数(float)的尾数是用24bit表示的,双精度(double)浮点数的尾数是用53bit表示的,转换成十进制: 2^24 - 1 = 16777215 2^53 - 1 = 9007199254740991 由上可见,IEEE754单精度浮点数的有效数字二进制是24位,按十进制来说
float和double是浮点数。
可能05在数据库中存储的是049999999999999;
而你传递的参数,05可能是049999999
极有可能导致 不等;
解决办法:
用范围查询:
不用float,用numeric或者decimal数据类型,确定精度
在SQL Server中,实际上小数数值只有两种数据类型:float 和 decimal,分别是近似数值和精确数值。
float 表示近似数值,存在精度损失,数据类型是 float(n),n是可选的,默认类型是float(53),占用8bytes。虽然n的取值范围是1-53,实际上,float 只能表示两种类型float(53) 和 float(24),分别占用 8Bytes 和 4Bytes。
decimal不存在精度损失,数据类型decimal(p,s) 需要分别指定小数的最大位数(p)和小数位的数量(s)。decimal 数据类型的最大精度为 38。即decimal 数据类型最多可以存储 38位数字,所有这些数字均可位于小数点后面。decimal 数据类型存储精确的数字表示形式,没有近似值。
扩展资料:
双精度(double precision)数据类型等价于 float(53),real等价于float(24),numeric是 decimal的同义词,应该避免在程序中直接使用 double precision、real和numeric,而是用 float(24) 、float(53)和decimal 代替。
float是近似数值,存在精度缺失;decimal是精确数值,不存在精度损失。当数值不允许精度丢失时,使用 decimal数据类型存储数据。在计算小数的除法时,SQL Server 内部隐式升级数据类型,根据小数数值的数据类型,就近向float(24) 或float(53)转换。
decimal[ (p[ , s] )] 和 numeric[ (p[ , s] )]
1 <= p <= 38,0 <= s <= p
即最大是 decimal(38,38),decimal 默认是 decimal(18,0),decimal 和 numeric 是等价的
不是用double
用
decimal(size,d)
numeric(size,d)
容纳带有小数的数字。
"size" 规定数字的最大位数。"d" 规定小数点右侧的最大位数。
以上就是关于sql定义一个double变量怎么定义全部的内容,包括:sql定义一个double变量怎么定义、mysql 数据库float,int,bigint,double区别、我用SQL条件查询语句查询的,条件是 float或 double类型的1.0以下的不能查询,以上的可以,这是为什么呀等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)