Canelo Digital Asked: 2018-04-27 07:17:54 +0800 CST2018-04-27 07:17:54 +0800 CST 2018-04-27 07:17:54 +0800 CST double (3,3) > 发送 1.3 > 存储 0.999 772 它让我大吃一惊...... MySQL DB 权重定义为double (3,3) INSERT INTO xxx (`weight`) VALUES ( 1.3) 为什么数据库存储0.999? mysql 3 个回答 Voted Best Answer Hannah Vernon 2018-04-27T07:18:56+08:002018-04-27T07:18:56+08:00 (3,3)表示总长度为3位,小数点后3位。也许你想要(6,3)。 有关详细信息,请参阅MySQL 文档。 John K. N. 2018-04-28T01:16:36+08:002018-04-28T01:16:36+08:00 由于以下错误,这不适用于 MySQL 8.0 安装: 输入 insert into xxx(weight) value (1,3) 错误 Out of range value for column 'weight' at row 1 请参阅:示例的dbfiddle 在您的情况下,您必须使用旧版本的 MySQL,它将存储最大允许值,即0.999. 使固定 如果您使用double(4,3)或 double(6,3)按照接受的答案中指出的那样创建一个表,那么它应该可以工作。 表定义 create table xxx (weight double (4,3)) 插入语句 insert into xxx (weight) value (1.3) 选择 select * from xxx | 重量 | | -----: | | 1.300 | 请参阅:dbfiddle示例 Rick James 2018-05-16T09:52:02+08:002018-05-16T09:52:02+08:00 永远不要(m,n)在FLOAT或上使用DOUBLE。它会导致额外的“舍入”,并可能导致不必要的/不需要的截断(这就是你得到的。)
(3,3)
表示总长度为3位,小数点后3位。也许你想要(6,3)
。有关详细信息,请参阅MySQL 文档。
由于以下错误,这不适用于 MySQL 8.0 安装:
输入
错误
请参阅:示例的dbfiddle
在您的情况下,您必须使用旧版本的 MySQL,它将存储最大允许值,即
0.999
.使固定
如果您使用
double(4,3)
或double(6,3)
按照接受的答案中指出的那样创建一个表,那么它应该可以工作。表定义
插入语句
选择
请参阅:dbfiddle示例
永远不要
(m,n)
在FLOAT
或上使用DOUBLE
。它会导致额外的“舍入”,并可能导致不必要的/不需要的截断(这就是你得到的。)