检查新的数据库结构我看到有人将某个字段从float更改为double。想知道为什么,我检查了mysql文档,但是老实说,不明白它们有什么区别。MySQL:float和double有什么区别?
有人可以解释一下吗?
检查新的数据库结构我看到有人将某个字段从float更改为double。想知道为什么,我检查了mysql文档,但是老实说,不明白它们有什么区别。MySQL:float和double有什么区别?
有人可以解释一下吗?
它们都表示浮点数。 A FLOAT
用于单精度数字,而DOUBLE
用于双精度数字。
MySQL对于单精度值使用四个字节,双精度值使用八个字节。
与浮点数和小数(数字)数有很大的不同,您可以使用它与DECIMAL
数据类型一起使用。与浮点数不同,这用于存储精确的数字数据值,例如,使用货币数据来保存精确的精度非常重要。
双打就像漂浮物,除了它们是两倍大的事实。这允许更高的准确性。
请注意,在某点之后浮动和双击。例如100000.1截断为100000作为浮点数。 – Blake 2018-03-06 20:30:51
FLOAT存储浮点数,精度达8位,并有四个字节,而DOUBLE存储浮点数的精度高达18位,并有八个字节。
也许这个例子可以解释。
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`;
HOLA!我们可以找到这样的不同:
+--------------------+---------+
| fla+flb | dba+dbb |
+--------------------+---------+
| 2.4000000953674316 | 2.40 |
+--------------------+---------+
也许一个更好的比较可以给fla和flb 2个小数点。 “浮动(10,2)' – Grateful 2017-11-28 09:26:21
浮动有32位(4个字节),8位精度。 Double具有64位(8字节),精度为16位。
如果需要更高的精度,使用双代替 的浮动。
思想我想补充我自己的例子,帮助我增加或与其他float
相乘时,decimal
和double
区别使用值1.3
看到。
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
);
注意[“因为在MySQL中所有的计算都以双精度进行使用FLOAT可能会给你一些意想不到的问题”(http://dev.mysql.com /doc/refman/5.0/en/numeric-type-overview.html) – 2011-04-19 12:08:01
我想你的意思是这个链接:http://dev.mysql.com/doc/refman/5.0/en/problems-with-float.html – arun 2014-02-20 03:58:52
这可能更有帮助:http://stackoverflow.com/questions/5150274/difference-between-float-and-decimal-data-type – 2014-03-17 00:03:23