[英]MYSQL: DECIMAL with accuracy of 10 digits after the comma
在 MySQL 中,我將 DECIMAL 字段設置為 10,10。 但是,每當我輸入一個新值時,它都會顯示 0.9999999999。 我需要更改什么才能接受逗號后精度為 10 位的任何數字? 出於某種原因,它確實適用於 10,6。
PS:我想插入匯率。
第一個數字是要存儲的總位數,第二個是小數部分的位數。 所以DECIMAL (10, 10)
僅適用於 10 位小數。 您可以使用DECIMAL (20, 10)
之類的東西來允許整數和小數部分都有 10 位數字。
DECIMAL(10,10) 表示小數點前的值沒有小數位。 您將事物限制為始終為x < 1
。
它是DECIMAL(total number of digits, digits after the decimal)
。 使用10,10
,您說的是“小數點后 10 位”,在小數點前留下10-10 = 0
。 這意味着您不能存儲 1,而 0.9999999999 是適合您的字段定義的最接近的值。
@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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.