您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

mysql小数用什么类型

2024/3/28 16:00:25发布20次查看
mysql小数可用的类型:1、float类型,可以存储单精度浮点数;2、double类型,可以存储双精度浮点数;3、decimal类型,用于存储精确的数值,例如会计系统中的货币数据。
本教程操作环境:windows7系统、mysql8版本、dell g3电脑。
mysql 中使用浮点数和定点数来表示小数。
浮点类型有两种,分别是单精度浮点数(float)和双精度浮点数(double);定点类型只有一种,就是 decimal。
浮点类型和定点类型都可以用(m, d)来表示,其中m称为精度,表示总共的位数;d称为标度,表示小数的位数。
浮点数类型的取值范围为 m(1~255)和 d(1~30,且不能大于 m-2),分别表示显示宽度和小数位数。m 和 d 在 float 和double 中是可选的,float 和 double 类型将被保存为硬件所支持的最大精度。decimal 的默认 d 值为 0、m 值为 10。
下表中列出了 mysql 中的小数类型和存储需求。
decimal 类型不同于 float 和 double。double 实际上是以字符串的形式存放的,decimal 可能的最大取值范围与 double 相同,但是有效的取值范围由 m 和 d 决定。如果改变 m 而固定 d,则取值范围将随 m 的变大而变大。
从上表中可以看到,decimal 的存储空间并不是固定的,而由精度值 m 决定,占用 m+2 个字节。
float 类型的取值范围如下:
有符号的取值范围:-3.402823466e+38~-1.175494351e-38。
            无符号的取值范围:0 和 -1.175494351e-38~-3.402823466e+38。
double 类型的取值范围如下:
有符号的取值范围:-1.7976931348623157e+308~-2.2250738585072014e-308。
            无符号的取值范围:0 和 -2.2250738585072014e-308~-1.7976931348623157e+308。
注意:不论是定点还是浮点类型,如果用户指定的精度超出精度范围,则会四舍五入进行处理。
float 和 double 在不指定精度时,默认会按照实际的精度,decimal 如果不指定精度,默认为(10,0)。
浮点数相对于定点数的优点是在长度一定的情况下,浮点数能够表示更大的范围;缺点是会引起精度问题。
decimal类型 decimal数据类型用于在数据库中存储精确的数值。我们经常将decimal数据类型用于保留准确精确度的列,例如会计系统中的货币数据。
要定义数据类型为decimal的列,请使用以下语法:
column_name decimal(p,d);
在上面的语法中:
p是表示有效数字数的精度。 p范围为1〜65。d是表示小数点后的位数。 d的范围是0~30。mysql要求d小于或等于(<=)p。decimal(p,d)表示列可以存储d位小数的p位数。十进制列的实际范围取决于精度和刻度。
与int数据类型一样,decimal类型也具有unsigned和zerofill属性。 如果使用unsigned属性,则decimal unsigned的列将不接受负值。
如果使用zerofill,mysql将把显示值填充到0以显示由列定义指定的宽度。 另外,如果我们对decimal列使用zero fill,mysql将自动将unsigned属性添加到列。
以下示例使用decimal数据类型定义的一个叫作amount的列。
amount decimal(6,2);
在此示例中,amount列最多可以存储6位数字,小数位数为2位; 因此,amount列的范围是从-9999.99到9999.99。
mysql允许使用以下语法:
column_name decimal(p);
这相当于:
column_name decimal(p,0);
在这种情况下,列不包含小数部分或小数点。
此外,我们甚至可以使用以下语法。
column_name decimal;
在这种情况下,p的默认值为10。
mysql decimal存储
mysql分别为整数和小数部分分配存储空间。 mysql使用二进制格式存储decimal值。它将9位数字包装成4个字节。
对于每个部分,需要4个字节来存储9位数的每个倍数。剩余数字所需的存储如下表所示:
剩余数字位
0 0
1–2 1
3–4 2
5–6 3
7-9 4
例如,decimal(19,9)对于小数部分具有9位数字,对于整数部分具有19位= 10位数字,小数部分需要4个字节。 整数部分对于前9位数字需要4个字节,1个剩余字节需要1个字节。decimal(19,9)列总共需要9个字节。
mysql decimal数据类型和货币数据
经常使用decimal数据类型的货币数据,如价格,工资,账户余额等。如果要设计一个处理货币数据的数据库,则可参考以下语法 -
amount decimal(19,2);
但是,如果您要遵守公认会计原则(gaap)规则,则货币栏必须至少包含4位小数,以确保舍入值不超过$0.01。 在这种情况下,应该定义具有4位小数的列,如下所示:
amount decimal(19,4);
mysql decimal数据类型示例
首先,创建一个名为test_order的新表,其中包含三列:id,description和cost。
create table test_order ( id int auto_increment primary key, description varchar(255), cost decimal(19,4) not null);
第二步,将资料插入test_order表。
insert into test_order(description,cost)values('bicycle', 500.34),('seat',10.23),('break',5.21);
第三步,从test_order表查询数据。
select * from test_order

第四步,更改cost列以包含zerofill属性。
alter table test_ordermodify cost decimal(19,4) zerofill;
第五步,再次查询test_order表。
select * from test_order

查询结果:
如上所见,在输出值中填充了许多零。
因为zerofill,当我们插入负值会报错:
insert into test_order(description,cost)values('test', -100.11);提示:[sql]insert into test_order(description,cost)values('test', -100.11)[err] 1264 - out of range value for column 'cost' at row 1
其它插入测试结论:
当数值在其取值范围之内,小数位多了,则四舍五入后直接截断多出的小数位。
若数值在其取值范围之外,则直接报out of range value错误。
【相关推荐:mysql视频教程】
以上就是mysql小数用什么类型的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product