如何在MySQL中存储小数?

时间:2013-05-18 22:53:53

标签: mysql

我尝试过将DECIMAL用于(2,2),但它不会让我使用它。

我只想存储一个数字,例如7.50或10.50。我需要在小数点后保留两个数字,但是当我刷新数据库时,它会将值重置为0.99。有什么建议吗?

6 个答案:

答案 0 :(得分:58)

DECIMAL声明的第一位是位数。您可能想要使用DECIMAL (4, 2)。这允许小数点前最多两位数,后面两位数。

文档:https://dev.mysql.com/doc/refman/5.7/en/precision-math-decimal-characteristics.html

答案 1 :(得分:16)

他们的语法是DECIMAL(M,D)

M - 总长度

D - 小数点右边的数字

http://dev.mysql.com/doc/refman/5.6/en/fixed-point-types.html

  

DECIMAL列的声明语法是DECIMAL(M,D)。该   MySQL 5.6中参数的值范围如下:

     

M是最大位数(精度)。它的范围是1   (较早版本的MySQL允许范围为1到254.)

     

D是小数点右边的位数(   规模)。它的范围为0到30,且不得大于M.

答案 2 :(得分:2)

CREATE TABLE IF NOT EXISTS `table_name` (`id` int(11) NOT NULL AUTO_INCREMENT,`cost` DECIMAL( 10, 2 ) NOT NULL);

这将使成本列总共保持10位数,小数点前8位和后2位。

答案 3 :(得分:0)

From mysql doc

  

DECIMAL列的声明语法是DECIMAL(M,D)。参数的值范围如下:

     
      
  • M是最大位数(精度)。它有一系列的   1至65岁。
  •   
  • D是小数点右边的位数(刻度)。它的范围为0到30,且不得大于M.
  •   

注意: - M是总数。小数点前的数字+总数。小数点后的数字。

在您的情况下,7.50总共没有3位数,10.50总共没有4位数。但声明的最大数量没有。列的数字是2,因此它可以存储最多两位数的值。您甚至不能存储1,因为它是1.00,即总共3位数。因此,列中允许的最大2位数值为.99

如果你想存储xx.xx,那么你必须声明(4,2)其中4是M而2是D.

如果要以最大允许大小的mysql存储任何数字,则可以使用(65,30)声明一列。

最大数量小数点前的数字= M - D

答案 4 :(得分:0)

CREATE TABLE `salary` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`salary` DECIMAL(10,2) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

DECIMAL(10,2)表示salary将保留总共10位数,其中2位将在小数点后面。

十进制前8位数和小数点后2位数。

答案 5 :(得分:-4)

将您的字段从INT更改为FLOAT