Appearance
定点数
使用 DECIMAL(M,D) 的方式表示高精度小数。其中,M 被称为精度,D 被称为标度。 0 <= M <= 65,0 <= D <= 30,D < M。例如,DECIMAL(5,2) 的类型,表示该列取值范围是 -999.99 ~ 999.99。
DECIMAL(M,D) 的最大取值范围与 DOUBLE 类型一样,但是有效的数据范围是由 M 和 D 决定的。 DECIMAL 的存储空间并不是固定的,由精度值 M 决定,总共占用的存储空间为 M + 2个字节。 也就是说,在一些对精度要求不高的场景下,比起占用同样字节长度的定点数,浮点数表达的数值 范围可以更大一些。定点数在 MySQL 内部是以 字符串 的形式进行存储,这就决定了它一定是精准 的。当DECIMAL类型不指定精度和标度时,其默认为 DECIMAL(10,0)。当数据的精度超出了定点数 类型的精度范围时,则MySQL同样会进行四舍五入处理。
浮点数 vs 定点数
浮点数相对于定点数的优点是在长度一定的情况下,浮点类型取值范围大,但是不精准,适用 于需要取值范围大,又可以容忍微小误差的科学计算场景(比如计算化学、分子建模、流体动 力学等)
定点数类型取值范围相对小,但是精准,没有误差,适合于对精度要求极高的场景 (比如涉 及金额计算的场景)