在MySQL中,我将DECIMAL字段设置为10,10。但是,每当我输入新值时,它都会显示0.9999999999。我需要更改以接受逗号后的任何数字,精度为10位数?由于某种原因,它确实可以使用10,6。
PS:我想插入汇率。
答案 0 :(得分:25)
第一个数字是要存储的总位数,第二个数字是小数部分的位数。因此DECIMAL (10, 10)
仅适用于10个小数位数。您可以使用DECIMAL (20, 10)
之类的内容在积分和小数部分上使用10位数字。
答案 1 :(得分:10)
DECIMAL(10,10)表示小数点前的值没有小数位。你限制的事情始终是x < 1
。
这是DECIMAL(total number of digits, digits after the decimal)
。使用10,10
,您会说“十进制后的10位数字”,在小数点前留下10-10 = 0
。这意味着您不能存储1,而0.9999999999是最接近您的字段定义的值。
答案 2 :(得分:6)
来自@ Xint0的答案是正确的。您已将精度和比例设置为相同的位数,因此您只能插入小于1.0的值。
正在发生的另一件事是,如果MySQL不符合列的数据类型,则会截断值的默认行为。
mysql> CREATE TABLE foo (dec DECIMAL(10,10));
mysql> INSERT INTO foo VALUES (1.0);
Query OK, 1 row affected, 1 warning (0.00 sec)
注意这会产生警告。
mysql> SHOW WARNINGS;
+---------+------+----------------------------------------------+
| Level | Code | Message |
+---------+------+----------------------------------------------+
| Warning | 1264 | Out of range value for column 'dec' at row 1 |
+---------+------+----------------------------------------------+
mysql> SELECT * FROM foo;
+--------------+
| dec |
+--------------+
| 0.9999999999 |
+--------------+
您可以使用严格的SQL模式将警告变为错误:
mysql> SET SQL_MODE = STRICT_ALL_TABLES;
mysql> INSERT INTO foo VALUES (1.0);
ERROR 1264 (22003): Out of range value for column 'dec' at row 1