我有一个非常奇怪的情况,mariaDB (mysql)插入(或更新)一个不同的十进制值。在下面的示例中,我想插入值'387507.65‘,但在mysql中它被注册为'387507.66’。如果我使用一个不同的数量,比如没有'3',那么它就被注册为罚款。
举个例子:
CREATE TABLE IF NOT EXISTS tbltest (
  ID int(11) NOT NULL AUTO_INCREMENT,
  admin_id int(11) NOT NULL DEFAULT '0',
  opening_balance float(11,2) NOT NULL DEFAULT '0.00',
  PRIMARY KEY (ID)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
INSERT INTO tbltest (ID, admin_id, opening_balance) VALUES (NULL,'1','387507.65');我使用5.5.52-MariaDB (Linux) 10.1.26-MariaDB (Linux)进行了测试
我必须做什么才能插入正确的值387507.65?
发布于 2018-02-28 22:18:26
对于FLOAT类型,MySQL在浮点数的有效位(小数部分)中最多使用24位。在此格式中,387507.65无法精确表示。最近的两个值是387507.625和387507.65625。由于后者更接近387507.65,因此MySQL使用它。
然后,当387507.65625打印小数点后有两个小数位时,它将舍入为387507.66。
如果你想精确地存储387507.65,你可以使用DECIMAL类型。(请注意,尽管有些人将小数浮点数描述为“精确”,但这是不正确的。小数浮点可以精确地存储小数,如果它们没有太多有效位数,但一般不能。对于大多数可能的输入值,加法、乘法、除法和减法的基本运算将返回四舍五入的结果,而不是精确的结果。)
如果要以更精确的近似值存储387507.65,但不需要精确度,则可以使用DOUBLE。
如果您不能使用FLOAT更改数据库,则无法更精确地存储387507.65。
https://stackoverflow.com/questions/49024998
复制相似问题