首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Mysql插入/更新不同的十进制值

Mysql插入/更新不同的十进制值
EN

Stack Overflow用户
提问于 2018-02-28 16:25:23
回答 2查看 187关注 0票数 0

我有一个非常奇怪的情况,mariaDB (mysql)插入(或更新)一个不同的十进制值。在下面的示例中,我想插入值'387507.65‘,但在mysql中它被注册为'387507.66’。如果我使用一个不同的数量,比如没有'3',那么它就被注册为罚款。

举个例子:

代码语言:javascript
复制
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?

EN

Stack Overflow用户

发布于 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。

票数 2
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49024998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档