gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 06:46:45 26 4
gpt4 key购买 nike

我有一个非常奇怪的情况,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 ?

最佳答案

对于FLOAT类型,MySQL在 float 的有效数(小数部分)中最多使用24位。在这种格式下,387507.65 无法准确表示。两个最接近的值是 387507.625 和 387507.65625。由于后者更接近387507.65,MySQL 使用它。

然后,当小数点后两位小数打印 387507.65625 时,四舍五入为 387507.66。

如果要准确存储 387507.65,可以使用 DECIMAL 类型。 (请注意,虽然有些人将十进制 float 描述为“精确”,但这是不正确的。十进制 float 可以精确地存储十进制数字,如果它们没有太多有效数字,但它不能一般来说,精确计算。对于大多数可能的输入值,加法、乘法、除法和减法的基本运算将返回舍入结果,而不是精确结果。)

如果您想以更精确的近似值存储 387507.65,但不需要精确性,则可以使用 DOUBLE。

如果您无法更改数据库使用 FLOAT,那么您就无法更精确地存储 387507.65。

关于Mysql插入/更新不同的十进制值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49024998/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com