如何在不知道小数点后的确切位数的情况下将小数保存到 mysql 数据库
How to save a decimal number to mysql database without knowing the exact amount of digits after the decimal
我有一个 MySQL 数据库,我需要在其中保存小数。我通常只使用小数类型,但我保存的货币对值可以是 2、3、4 或 5 位数字小数点。我的临时修复是使用 Varchar 或将小数长度设置为 5,并在较小的小数上使用一些额外的零,但这对于计算来说并不是最佳的。如何存储具有不同位数的十进制数
您可以定义小数位数为 5 的 DECIMAL 列。这将允许小数点后任意位数的值最多为 5。
演示:
mysql> create table mytable (d decimal(12,5));
Query OK, 0 rows affected (0.01 sec)
mysql> insert into mytable values (123), (123.4), (123.45), (123.456), (123.4567), (123.45678), (123.456789);
Query OK, 7 rows affected, 1 warning (0.00 sec)
Records: 7 Duplicates: 0 Warnings: 1
mysql> show warnings;
+-------+------+----------------------------------------+
| Level | Code | Message |
+-------+------+----------------------------------------+
| Note | 1265 | Data truncated for column 'd' at row 7 |
+-------+------+----------------------------------------+
1 row in set (0.00 sec)
mysql> select * from mytable;
+-----------+
| d |
+-----------+
| 123.00000 |
| 123.40000 |
| 123.45000 |
| 123.45600 |
| 123.45670 |
| 123.45678 |
| 123.45679 |
+-----------+
7 rows in set (0.00 sec)
你可以看到,当我尝试使用小数点后6位的数字时,它被强制四舍五入。
我有一个 MySQL 数据库,我需要在其中保存小数。我通常只使用小数类型,但我保存的货币对值可以是 2、3、4 或 5 位数字小数点。我的临时修复是使用 Varchar 或将小数长度设置为 5,并在较小的小数上使用一些额外的零,但这对于计算来说并不是最佳的。如何存储具有不同位数的十进制数
您可以定义小数位数为 5 的 DECIMAL 列。这将允许小数点后任意位数的值最多为 5。
演示:
mysql> create table mytable (d decimal(12,5));
Query OK, 0 rows affected (0.01 sec)
mysql> insert into mytable values (123), (123.4), (123.45), (123.456), (123.4567), (123.45678), (123.456789);
Query OK, 7 rows affected, 1 warning (0.00 sec)
Records: 7 Duplicates: 0 Warnings: 1
mysql> show warnings;
+-------+------+----------------------------------------+
| Level | Code | Message |
+-------+------+----------------------------------------+
| Note | 1265 | Data truncated for column 'd' at row 7 |
+-------+------+----------------------------------------+
1 row in set (0.00 sec)
mysql> select * from mytable;
+-----------+
| d |
+-----------+
| 123.00000 |
| 123.40000 |
| 123.45000 |
| 123.45600 |
| 123.45670 |
| 123.45678 |
| 123.45679 |
+-----------+
7 rows in set (0.00 sec)
你可以看到,当我尝试使用小数点后6位的数字时,它被强制四舍五入。