我不能完全掌握MySQL的小数。我需要行能够包含一个从00.0001到99.9999的数字。我该如何构造它才能像这样工作呢?
发布于 2012-03-09 23:27:52
DOUBLE列与十进制列不同,如果您使用DOUBLE列存储财务数据,将会遇到麻烦。
DOUBLE实际上只是FLOAT的双精度(64位而不是32位)版本。浮点数是real numbers的近似表示,它们不是精确的。事实上,像0.01这样的简单数字在浮点或双精度类型中没有精确的表示。
十进制列是精确的表示形式,但对于较小的可能数字范围,它们占用的空间要大得多。要按照您的要求创建一个能够保存从0.0001到99.9999的值的列,您需要以下语句
CREATE TABLE your_table
(
your_column DECIMAL(6,4) NOT NULL
);列定义遵循格式DECIMAL(M,D),其中M是最大位数(精度),D是小数点右侧的位数(小数位数)。
这意味着前面的命令创建了一个接受-99.9999到99.9999之间的值的列。您还可以创建一个从0.0000到99.9999的无符号十进制列。
例如,如果您想要一个接受-9999.99到9999.99之间的值的列,命令应该是DECIMAL(6,2)。如您所见,您仍然使用精度6,但仅允许小数位数为2。
有关MySQL DECIMAL的更多信息,official docs始终是一个很好的资源。
请记住,所有这些信息都适用于MySQL 5.0.3和更高版本。如果你使用的是以前的版本,你真的应该升级。
关于MySQL 8.0.17+的更新
浮点列、双精度列和十进制列的Unsigned is deprecated。
发布于 2015-07-02 03:19:29
尽管上面的答案看起来是正确的,但只需要一个简单的解释来让你了解它是如何工作的。
假设您的列被设置为DECIMAL(13,4)。这意味着该列的总大小为13位,其中4位将用于精确表示。
因此,总之,对于该列,您将有一个最大值:999999999.9999
发布于 2017-01-07 07:17:36
https://stackoverflow.com/questions/4834390
复制相似问题