MySQL,使用十进制类型,在使用数学函数时仍然得到不精确的输出

时间:2014-09-24 15:39:39

标签: php mysql bcmath

拥有一个PHP脚本 - 使用所有正确的bcmath函数,并完全理解浮点数的问题。我也使用十进制列,因为,我的印象是,那些存储为不同的类型,并且数学更好。

所以我有一个问题: INSERT INTO mytable(标识符,金额)VALUES('identifer','some_number')ON DUPLICATE KEY UPDATE amount = amount + some_number;

基本上 - 如果我们没有行,请插入它,如果我们这样做,请添加some_number。

some_number列是十进制(24,8)

当some_number等于72100312.72872099并且当前行在0.00000000处清零时运行此时,数学结束时该列为72100312.72872100。

如果some_number是72100312.72872098,它可以正常工作。如果是72100312.72872101则罚款。如果我做11111111.72872099罚款。

如果当前行不为零,而是.00000005,那么72100312.72872099会增加罚款,总计为72100312.72872104。

这就像搞砸了一些数学。我认为十进制列对此免疫。

有没有办法解决这个问题,或者以更好的方式进行更新?我真的不必做一个选择,一个bcadd,然后一个更新。这种类型的行(在duoplicate update上插入)在代码中出现约120次。那就是选择/ bcadd / update的很多改装。

附录:只需在5.0转换为浮动数据之前读取MySQL服务器。我在5.5。它不是< 5.0问题。

Edit2:客户端版本是mysqlnd 5.0.11 - 不确定这是否可能是问题的一部分?服务器应该进行数学运算,对吗?

0 个答案:

没有答案