>  기사  >  데이터 베이스  >  mysql은 소수에 어떤 유형을 사용합니까?

mysql은 소수에 어떤 유형을 사용합니까?

青灯夜游
青灯夜游원래의
2021-12-01 16:41:0033449검색

mysql 십진수에 사용할 수 있는 유형: 1. 단정밀도 부동 소수점 숫자를 저장할 수 있는 FLOAT 유형 2. 배정도 부동 소수점 숫자를 저장할 수 있는 DOUBLE 유형 3. 정밀한 부동 소수점 숫자를 저장하는 데 사용되는 DECIMAL 유형 회계 시스템 데이터의 통화와 같은 값.

mysql은 소수에 어떤 유형을 사용합니까?

이 튜토리얼의 운영 환경: 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의 십진수 유형 및 저장 요구 사항이 나열되어 있습니다.

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.

  • Note
  • : 고정 소수점 유형이든 부동 소수점 유형이든 사용자가 지정한 정밀도가 정밀도 범위를 초과하는 경우 반올림 처리됩니다.
  • FLOAT 및 DOUBLE은 정밀도가 지정되지 않은 경우 기본값은 (10, 0)입니다.

고정 소수점 숫자에 비해 부동 소수점 숫자의 장점은 길이가 일정할 때 더 큰 범위를 나타낼 수 있다는 것입니다. 단점은 정확성 문제를 일으킬 수 있다는 것입니다.

DECIMAL 유형

DECIMAL 데이터 유형은 데이터베이스에 정확한 값을 저장하는 데 사용됩니다. 회계 시스템의 통화 데이터와 같이 정확한 정밀도를 유지하는 열에 DECIMAL 데이터 유형을 사용하는 경우가 많습니다.

데이터 유형이 DECIMAL인 열을 정의하려면 다음 구문을 사용하세요.

column_name  DECIMAL(P,D);
위 구문에서:

    P는 유효 자릿수입니다. 정확성. P의 범위는 1~65입니다.

    D는 소수점 이하 자릿수를 나타냅니다. D의 범위는 0~30입니다. MySQL에서는 D가 () <code>P보다 작거나 같아야 합니다. DECIMAL数据类型用于在数据库中存储精确的数值。我们经常将DECIMAL数据类型用于保留准确精确度的列,例如会计系统中的货币数据。

    要定义数据类型为DECIMAL的列,请使用以下语法:

    amount DECIMAL(6,2);

    在上面的语法中:

    • P是表示有效数字数的精度。 P范围为1〜65
    • D是表示小数点后的位数。 D的范围是0~30。MySQL要求D小于或等于()<code>P

    DECIMAL(P,D)表示列可以存储D位小数的P位数。十进制列的实际范围取决于精度和刻度。

    与INT数据类型一样,DECIMAL类型也具有UNSIGNEDZEROFILL属性。 如果使用UNSIGNED属性,则DECIMAL UNSIGNED的列将不接受负值。

    如果使用ZEROFILL,MySQL将把显示值填充到0以显示由列定义指定的宽度。 另外,如果我们对DECIMAL列使用ZERO FILL,MySQL将自动将UNSIGNED属性添加到列。

    以下示例使用DECIMAL数据类型定义的一个叫作amount的列。

    column_name DECIMAL(P);

    在此示例中,amount列最多可以存储6位数字,小数位数为2位; 因此,amount列的范围是从-9999.999999.99

    MySQL允许使用以下语法:

    column_name DECIMAL(P,0);

    这相当于:

    column_name DECIMAL;

    在这种情况下,列不包含小数部分或小数点。

    此外,我们甚至可以使用以下语法。

    amount DECIMAL(19,2);

    在这种情况下,P的默认值为10

    DECIMAL(P, D)는 해당 열이 소수점 D자리의 P자리를 저장할 수 있음을 의미합니다. 10진수 열의 실제 범위는 정밀도와 소수 자릿수에 따라 달라집니다. INT 데이터 유형과 마찬가지로 DECIMAL 유형에도 UNSIGNEDZEROFILL 속성이 있습니다. UNSIGNED 속성이 사용되는 경우 DECIMAL UNSIGNED 열은 음수 값을 허용하지 않습니다. ZEROFILL을 사용하는 경우 MySQL은 표시 값을 0으로 채워 열 정의에 지정된 너비를 표시합니다. 또한 DECIMAL 열에 ZERO FILL을 사용하면 MySQL은 자동으로 해당 열에 UNSIGNED 속성을 ​​추가합니다.

    🎜다음 예에서는 DECIMAL 데이터 유형을 사용하여 정의된 amount라는 열을 사용합니다. 🎜
    amount DECIMAL(19,4);
    🎜이 예에서 amount 열은 소수점 2자리로 최대 6자리를 저장할 수 있습니다. 금액 열은 -9999.99부터 9999.99까지입니다. 🎜🎜MySQL에서는 다음 구문을 허용합니다. 🎜
    CREATE TABLE test_order (
        id INT AUTO_INCREMENT PRIMARY KEY,
        description VARCHAR(255),
        cost DECIMAL(19,4) NOT NULL
    );
    🎜 이는 다음과 같습니다. 🎜
    INSERT INTO test_order(description,cost)
    VALUES(&#39;Bicycle&#39;, 500.34),(&#39;Seat&#39;,10.23),(&#39;Break&#39;,5.21);
    🎜 이 경우 열에는 소수 부분이나 소수점이 포함되지 않습니다. 🎜🎜또한 다음 구문을 사용할 수도 있습니다. 🎜
    SELECT * from test_order
    🎜이 경우 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的新表,其中包含三列:iddescriptioncost

    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(&#39;Bicycle&#39;, 500.34),(&#39;Seat&#39;,10.23),(&#39;Break&#39;,5.21);

    第三步,从test_order表查询数据。

    SELECT * from test_order

    第四步,更改cost列以包含ZEROFILL属性。

    ALTER TABLE test_order
    MODIFY cost DECIMAL(19,4) zerofill;

    第五步,再次查询test_order表。

    SELECT * from test_order

    查询结果

     

    如上所见,在输出值中填充了许多零。

    因为zerofill,当我们插入负值会报错:

    INSERT INTO test_order(description,cost)
    VALUES(&#39;test&#39;, -100.11);
    提示:
    [SQL]INSERT INTO test_order(description,cost)
    VALUES(&#39;test&#39;, -100.11)
    
    [Err] 1264 - Out of range value for column &#39;cost&#39; at row 1

    其它插入测试结论:

    当数值在其取值范围之内,小数位多了,则四舍五入后直接截断多出的小数位。

    若数值在其取值范围之外,则直接报Out of range value错误。

    【相关推荐:mysql视频教程

위 내용은 mysql은 소수에 어떤 유형을 사용합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.