如何使用MySQL DECIMAL?

时间:2011-01-29 00:54:15

标签: mysql

我无法掌握MySQL的DECIMAL。我需要行能够包含从00.0001到99.9999之间的任何数字。我将如何构建它以便像这样工作?

4 个答案:

答案 0 :(得分:409)

DOUBLE列 与DECIMAL列相同,如果您使用DOUBLE列作为财务数据,将遇到麻烦

DOUBLE实际上只是FLOAT的双精度(64位而不是32位)版本。浮点数是real numbers的近似表示,它们并不精确。实际上,像0.01这样的简单数字在FLOAT或DOUBLE类型中没有精确的表示。

DECIMAL列是精确的表示形式,但它们占用更多空间,可用于更小范围的可能数字。要创建一个能够保存0.0001到99.9999之间值的列,就像您要求的那样,需要以下语句

CREATE TABLE your_table
(
    your_column DECIMAL(6,4) NOT NULL
);

列定义遵循DECIMAL(M,D)格式,其中 M 是最大位数(精度)和 D 是小数点右边的位数( scale )。

这意味着上一个命令会创建一个接受-99.9999到99.9999之间值的列。您还可以创建一个UNSIGNED DECIMAL列,范围从0.0000到99.9999。

有关MySQL DECIMAL的更多信息,official docs始终是一个很好的资源。

请记住,所有这些信息都适用于MySQL 5.0.3及更高版本。如果您使用以前的版本,那么您真的应该升级。

答案 1 :(得分:45)

虽然上面的答案似乎是正确的,但只是一个简单的解释,让您了解它是如何工作的。

假设您的列设置为DECIMAL(13,4)。这意味着该列的总大小为13位,其中4位将用于精确表示。

因此,总而言之,对于该列,您的最大值为:999999999.9999

答案 2 :(得分:11)

评论中有正确的解决方案,但总结为一个答案:

你必须使用DECIMAL(6,4)。

然后你可以有6个总位数,2个小数点之前和4个小数点后面的数字(比例)。至少根据this

答案 3 :(得分:6)

用于十进制数据类型的MySQL 5.x specification是:DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]。上面的答案是错误的,说无法使用无符号小数。

要定义一个只允许无符号小数的字段,总长度为6位,其中4位为小数,您可以使用:DECIMAL (6,4) UNSIGNED

您同样可以创建无符号(即非负)FLOAT和DOUBLE数据类型。