programing

MySQL: 플로트와 더블의 차이점은 무엇입니까?

newsource 2022. 9. 21. 00:07

MySQL: 플로트와 더블의 차이점은 무엇입니까?

새로운 데이터베이스 구조를 확인해보니 누군가 필드를 플로트에서 더블로 변경했습니다.왜 그런지 궁금해서 mysql 서류를 확인했는데 솔직히 뭐가 다른지 모르겠어요.

누가 설명 좀 해줄래?

둘 다 부동 소수점 숫자를 나타냅니다.aFLOAT싱글 슬립용이지만,DOUBLE두 자리 숫자용입니다.

MySQL은 단일 정밀도 값에는 4바이트, 이중 정밀도 값에는 8바이트를 사용합니다.

부동소수점수나 10진수(숫자)와는 큰 차이가 있습니다.이러한 숫자는, 다음의 명령어와 함께 사용할 수 있습니다.DECIMALdata type 입니다.이것은 통화 데이터와 같이 정확한 정밀도를 유지하는 것이 중요한 부동 소수점 숫자와 달리 정확한 숫자 데이터 값을 저장하는 데 사용됩니다.

아마도 이 예가 설명할 수 있을 것이다.

CREATE TABLE `test`(`fla` FLOAT,`flb` FLOAT,`dba` DOUBLE(10,2),`dbb` DOUBLE(10,2)); 

다음과 같은 테이블이 있습니다.

+-------+-------------+
| Field | Type        |
+-------+-------------+
| fla   | float       |
| flb   | float       |
| dba   | double(10,2)|
| dbb   | double(10,2)|
+-------+-------------+

첫 번째 차이를 위해 각 필드에 '1.2'가 있는 레코드를 삽입하려고 합니다.

INSERT INTO `test` values (1.2,1.2,1.2,1.2);

표는 다음과 같습니다.

SELECT * FROM `test`;

+------+------+------+------+
| fla  | flb  | dba  | dbb  |
+------+------+------+------+
|  1.2 |  1.2 | 1.20 | 1.20 |
+------+------+------+------+

차이를 알 수 있을까요?

다음으로 예를 제시하겠습니다.

SELECT fla+flb, dba+dbb FROM `test`;

호라! 우리는 다음과 같은 차이를 찾을 수 있다.

+--------------------+---------+
| fla+flb            | dba+dbb |
+--------------------+---------+
| 2.4000000953674316 |    2.40 |
+--------------------+---------+

더블은 두 배나 크다는 점을 제외하면 물에 뜨는 것과 같다.따라서 정확도가 향상됩니다.

가치를 사용하여 차이를 알 수 있는 나만의 사례를 추가하려고 합니다.1.3다른 것과 더하거나 곱할 때float,decimal,그리고.double.

1.3추가되는 플로트1.3다른 타입:

|float              | double | decimal |
+-------------------+------------+-----+
|2.5999999046325684 | 2.6    | 2.60000 |

1.3곱한 부동1.3다른 타입:

| float              | double             | decimal      |
+--------------------+--------------------+--------------+
| 1.6899998760223411 | 1.6900000000000002 | 1.6900000000 |

MySQL 6.7을 사용하고 있습니다.

쿼리:

SELECT 
    float_1 + float_2 as 'float add',
    double_1 + double_2 as 'double add',
    decimal_1 + decimal_2 as 'decimal add',

    float_1 * float_2 as 'float multiply',
    double_1 * double_2 as 'double multiply',
    decimal_1 * decimal_2 as 'decimal multiply'
FROM numerics

테이블 생성 및 데이터 삽입:

CREATE TABLE `numerics` (
  `float_1` float DEFAULT NULL,
  `float_2` float DEFAULT NULL,
  `double_1` double DEFAULT NULL,
  `double_2` double DEFAULT NULL,
  `decimal_1` decimal(10,5) DEFAULT NULL,
  `decimal_2` decimal(10,5) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `_numerics` 
    (
        `float_1`,
        `float_2`,
        `double_1`,
        `double_2`,
        `decimal_1`,
        `decimal_2`
    )
VALUES
    (
        1.3,
        1.3,
        1.3,
        1.3,
        1.30000,
        1.30000
    );

Float에는 32비트(4바이트)의 정확도가 8자리입니다.Double에는 64비트(8바이트)의 정확도가 16자리입니다.

더 나은 정확도가 필요한 경우 Float 대신 Double을 사용하십시오.

FLOAT는 부동소수점 번호를 최대 8자리까지 정확하게 저장하며 4바이트를 가집니다.DOUBLE은 최대 18자리까지 정확하게 부동소수점 번호를 저장하며 8바이트를 가집니다.

언급URL : https://stackoverflow.com/questions/2160810/mysql-whats-the-difference-between-float-and-double