如何使用MySQL DECIMAL?

我不能完全掌握MySQL的DECIMAL。 我需要该行可以包含从00.0001到99.9999之间的任意数字。 我将如何构build它像这样工作?

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

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

DECIMAL列是精确的表示,但是它们占用了更多的空间,可用的数字范围更小。 要创build一个能够保持从0.0001到99.9999的值的列,就像你问的那样,你需要下面的语句

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

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

这意味着前面的命令会创build一个接受-99.9999到99.9999的值的列。 您也可以创build一个UNSIGNED DECIMAL列,范围从0.0000到99.9999。

有关MySQL DECIMAL的更多信息, 官方文档总是很好的资源。

请记住,所有这些信息对于MySQL 5.0.3及更高版本都是正确的。 如果你使用的是以前的版本,你应该升级。

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

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

因此,总而言之,对于该列,您将拥有最大值: 999999999,9999

十进制数据types的MySQL 5.x 规范是: DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL] 。 上面的答案是错误的,说无符号小数是不可能的。

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

您也可以创build无符号的(即不是负的)FLOAT和DOUBLE数据types。

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

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

那么你可以有6位总数,2位在小数点之后(小数点后4位)。 至less按照这个 。