美文网首页MySQL
MySQL定点数据类型(精确值)-DECIMAL

MySQL定点数据类型(精确值)-DECIMAL

作者: Jerry_1116 | 来源:发表于2018-10-24 23:46 被阅读0次

    1 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.34 OK
    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) 来操作,如果数据超过了精度和标度值,系统会报错。

    相关文章

      网友评论

        本文标题:MySQL定点数据类型(精确值)-DECIMAL

        本文链接:https://www.haomeiwen.com/subject/ojgizftx.html