MySQL定点数据类型(精确值)-DECIMAL
1 DECIMAL介绍
decimal是整数数据类型在MySQL中,DECIMAL和NUMERIC是定点类型数据,以⼆进制形式存储,因此存储的是准确的数字。
在创建MySQL的DECIMAL列的时候,可以指定进度和标度:DECIMAL(M,D)。M为精度(precision),表⽰该值的总长度;D为标度(scale),表⽰⼩数点后⾯的长度。
例如:
DECIMAL(7,4)可存储的数据范围为-999.9999~999.9999。MySQL保存值时进⾏四舍五⼊,如果插⼊999.00009,则结果为999.0001。
在标准SQL中,语法DECIMAL为默认值,等价于DECIMAL(10,0)。DECIMAL(M)等价于DECIMAL(M,0)。
FLOAT和DOUBLE在不指定精度时,默认会按照实际的精度来显⽰,⽽DECIMAL在不指定精度时,默认整数为10,⼩数为0,即
DECIMAL(10,0)。
DECIMAL的数字总长度M最⼤为65,但是实际能表⽰的数值范围受精度和标度的限制。当DECIMAL(M,D)列存储的数值的⼩数位数超过D,则四舍五⼊到D位。当DECIMAL(M,D)列存储的数值⼤于该列能表⽰的范围,则存储为DECIMAL(M,D)能表⽰的最⼤值;当DECIMAL(M,D)列存储的数值⼩于该列能表⽰的范围,则存储为DECIMAL(M,D)能表⽰的最⼩值。
⽰例:
定义数据库列为DECIMAL(5,2)
插⼊数据:
插⼊值结果
1.2345⼩数点后最多2位,所以保存可以,⾃动四舍五⼊数据截断,但会报waning
12.34OK
1234.5因为⼩数部分未满2位,要补0.所以保存应该1234.50。所以整个位数超出了5,保存报错。
1.2⼩数未满部分补0。按照1.20保存。
注意
在mysql中float、double(或real)是浮点数,decimal(或numberic)是定点数。
浮点数相对于定点数的优点是在长度⼀定的情况下,浮点数能够表⽰更⼤的数据范围;它的缺点是会引起精度问题。
在今后关于浮点数和定点数的应⽤中,⼤家要记住以下⼏点:
1、浮点数存在误差问题;
2、对货币等对精度敏感的数据,应该⽤定点数表⽰或存储;
3、编程中,如果⽤到浮点数,要特别注意误差问题,并尽量避免做浮点数⽐较;
4、要注意浮点数中⼀些特殊值的处理。
2 浮点数和定点数的⽐较
默认状态⽐较
浮点数如果不写经度和标度,会按照实际精度值保存,如果有精度和标度,则会⾃动将四舍五⼊后的结果插⼊,系统不会报错;定点数如果不写精度和标度,则按照默认值decimal(10,0) 来操作,如果数据超过了精度和标度值,系统会报错。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论