새로운 데이터베이스 구조를 확인하면서 누군가 필드를 float에서 double로 변경 한 것을 보았습니다. 이유가 궁금해서 mysql 문서를 확인했지만 솔직히 차이점이 무엇인지 이해하지 못했습니다.
누군가 설명 할 수 있습니까?
새로운 데이터베이스 구조를 확인하면서 누군가 필드를 float에서 double로 변경 한 것을 보았습니다. 이유가 궁금해서 mysql 문서를 확인했지만 솔직히 차이점이 무엇인지 이해하지 못했습니다.
누군가 설명 할 수 있습니까?
답변:
둘 다 부동 소수점 숫자를 나타냅니다. A FLOAT
는 단 정밀도이고 a DOUBLE
는 배정 밀도 숫자입니다.
MySQL은 단 정밀도 값에 4 바이트를 사용하고 배정 밀도 값에 8 바이트를 사용합니다.
DECIMAL
데이터 유형 과 함께 사용할 수있는 부동 소수점 숫자 및 10 진수 (숫자)와는 큰 차이가 있습니다 . 이는 통화 데이터와 같이 정확한 정밀도를 유지하는 것이 중요한 부동 소수점 숫자와 달리 정확한 숫자 데이터 값을 저장하는 데 사용됩니다.
아마도이 예가 설명 할 수있을 것입니다.
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 |
+--------------------+---------+
float(10, 2)
생각 나는 날이 값을 사용하여 차이를 볼 도움이 내 자신의 예를 추가 할 것입니다 1.3
추가하거나 서로 곱하면 float
, decimal
,와 double
.
1.3
1.3
다른 유형의 ADDED 부동 :
|float | double | decimal |
+-------------------+------------+-----+
|2.5999999046325684 | 2.6 | 2.60000 |
1.3
float MULTIPLIED by 1.3
of different types :
| 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는 최대 8 자리의 정확도로 부동 소수점 숫자를 저장하고 4 바이트를 포함하는 반면 DOUBLE은 최대 18 자리의 정확도로 8 바이트의 부동 소수점 숫자를 저장합니다.