• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 数值类型

    精确值运算的精度数学范围包括精确值数据类型(整数和DECIMAL类型)和精确值数字文字。近似值数据类型和数字文字作为浮点数处理。

    精确值数字文字具有整数部分或小数部分,或两者都有。它们可能已签名。例如:1.23.4-5-6.78+9.10

    近似值数字文字以科学计数法表示,并带有尾数和指数。这两个部分中的一个或两个都可以签名。例如:1.2E31.2E-3-1.2E3-1.2E-3

    看起来相似的两个数字可能会有所不同。例如,2.34是一个精确值(定点)数字,而是2.34E0一个近似值(浮点)数字。

    DECIMAL数据类型是一个定点类型和计算是精确的。在MySQL中,DECIMAL类型有多个同义词:NUMERICDECFIXED。整数类型也是精确值类型。

    FLOATDOUBLE数据类型是浮点类型,其计算是近似的。在MySQL中,类型与同义FLOATDOUBLEDOUBLE PRECISIONREAL


    DECIMAL数据类型特征

    本节讨论DECIMAL数据类型(及其同义词)的特征,特别是以下主题:

    • 最大位数
    • 储存格式
    • 储存要求
    • 非标准MySQL扩展到DECIMAL列的上限

    DECIMAL列的声明语法为。自变量的值范围如下:DECIMAL(M,D)

    • M是最大位数(精度)。范围是1到65。
    • D是小数点右边的位数(小数位数)。范围是0到30,并且不能大于M

    如果D省略,则默认值为0。如果M省略,则默认值为10。

    最大值65 M表示对DECIMAL值的计算最多可精确到65位。此65位精度的限制也适用于精确值数字文字,因此此类文字的最大范围与以前有所不同。

    DECIMAL列的值使用二进制格式存储,该格式将9个十进制数字打包为4个字节。每个值的整数和小数部分的存储要求分别确定。九位数的每个倍数需要4个字节,剩余的任何剩余位数都需要4字节的一部分。下表列出了剩余数字所需的存储量。

    剩余数字字节数
    00
    1–21个
    3–42
    5–63
    7–94

    例如,一DECIMAL(18,9)列在小数点的任一侧都有9位数字,因此整数部分和小数部分每个都需要4个字节。一DECIMAL(20,6)列有十四个整数数字和六个小数位数。整数位中的9位需要4个字节,其余5位需要3个字节。六个小数位需要3个字节。

    DECIMAL列不存储前导+字符或-字符或前导0数字。如果插入+0003.1到一个DECIMAL(5,1)列,它被存储为3.1。对于负数,-不存储文字字符。

    DECIMAL列不允许大于列定义所隐含范围的值。例如,一DECIMAL(3,0)列支持的范围为-999999。一列允许小数点左边最多-位。DECIMAL(M,D)MD

    SQL标准要求的精确度是准确数字。对于,该标准要求至少为几位的精度,但允许更高的精度。在MySQL中,和相同,并且都具有精确的数字精度。NUMERIC(M,D)MDECIMAL(M,D)MDECIMAL(M,D)NUMERIC(M,D)M

    有关DECIMAL值的内部格式的完整说明,请参见strings/decimal.cMySQL源代码分发中的文件。在decimal2bin()函数中解释了格式(带有示例)。


    下篇:表达式处理