mysql单精度与双精度,MySQL:float和double有什么区别?

在检查新的数据库结构时,我看到有人将字段从float更改为double。我想知道为什么,我检查了MySQL文档,但老实说,我不知道有什么区别。

有人能解释吗?

注意,"使用float可能会给您带来一些意想不到的问题,因为mysql中的所有计算都是用双精度完成的。"

我猜你的意思是这个链接:dev.mysql.com/doc/refman/5.0/en/problems-with-float.html

这可能更有用:stackoverflow.com/questions/5150274/…

同样相关:dev.mysql.com/doc/refman/5.0/en/no-matching-rows.html上的5点

它们都代表浮点数。FLOAT表示单精度,而DOUBLE表示双精度数。

MySQL使用四个字节作为单精度值,使用八个字节作为双精度值。

与浮点数和十进制(数字)数字有很大的区别,您可以将它们与DECIMAL数据类型一起使用。这用于存储精确的数字数据值,与浮点数不同,在浮点数中,保持精确的精度非常重要,例如货币数据。

好吧,说得通。谢谢!

你能举例说明一下吗

@凯拉斯浮点数是四舍五入的,小数则不是。十进制(9,3)可以是123456.789,但是如果您试图存储123456.789,它将作为一个浮点插入123456.0。

也许这个例子可以解释。

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 |

+--------------------+---------+

也许更好的比较应该是给fla和flb两个小数点。float(10, 2)

双打就像浮球,除了两倍大。这样可以获得更高的精度。

注意,在某个点之后,浮点数和双整数。例如,100000.1作为浮点值截断为100000。

浮点有32位(4字节),精度为8位。double具有64位(8字节)和16位精度。

如果你需要更好的准确度,就用双倍来代替漂浮的

float存储浮点数的精度高达8位,有4个字节;double存储浮点数的精度高达18位,有8个字节。

我想我会添加我自己的例子,帮助我在与另一个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 |

这是使用MySQL6.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单精度与双精度)