如何使用MySQL DECIMAL?

Cha*_*ink 166 mysql

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

Ale*_*rey 420

双列一样的DECIMAL列,你会遇到麻烦,如果你使用双列的财务数据.

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

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

CREATE TABLE your_table
(
    your_column DECIMAL(6,4) NOT NULL
);
Run Code Online (Sandbox Code Playgroud)

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

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

有关MySQL DECIMAL的更多信息,官方文档始终是一个很好的资源.

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

  • +1"如果您使用DOUBLE,您将陷入麻烦" (107认同)
  • 投票给你答案.你的答案是正确的,另一个答案是不正确的(因为它声称"double = decimal").DECIMAL是一个具有精确值的定点类型,其同义词是NUMERIC,DEC和FIXED.不是DOUBLE,因为DOUBLE是一种表示近似数值数据值的浮点类型.使用DECIMAL(<1-65>,<0-30>)时,第一个参数是位数,第二个参数是小数点右边的位数. (17认同)
  • @AlexRecarey我似乎能够创建一个DECIMAL UNSIGNED就好了; 并且MySQL 5.x的手册同意:`DECIMAL [(M [,D])] [UNSIGNED] [ZEROFILL]`.对于负值,它将返回超出范围的错误.您也可以创建未签名的FLOAT和DOUBLE.手册:https://dev.mysql.com/doc/refman/5.0/en/numeric-type-overview.html (3认同)
  • 是的,你是对的.请注意,这适用于MySQL 5.0.3及更高版本,http://dev.mysql.com/doc/refman/5.1/en/precision-math-examples.html (2认同)
  • 发帖者要求提供一个小数字段,其值介于 0.0001 和 99.9999 之间。我添加了一些额外的信息来澄清创建的字段实际上支持从 -99.9999 到 99.9999 的值。感谢您的反馈!还添加了 MySQL 版本免责声明。 (2认同)

小智 53

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

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

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


小智 14

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

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

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


Mar*_* AO 6

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

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

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