簡體   English   中英

MYSQL:DECIMAL,逗號后精度為 10 位

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM