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

Php 使用十进制类型的MySQL在使用数学函数时仍然得到不精确的输出,php,mysql,bcmath,Php,Mysql,Bcmath,有一个PHP脚本-使用所有正确的bcmath函数,并完全理解浮点的问题。我还使用了十进制列,因为我印象中,这些列是以不同的类型存储的,并且数学上更好 所以我有一个疑问: 在mytable(标识符,金额)中插入重复键上的值('identifer','some_number')更新金额=金额+some_number 基本上-如果我们没有行,插入它,如果有,添加some_编号 数字列为十进制(24,8) 当运行此函数时,某些_数等于72100312.72872099,并且当前行被调零为0.000000

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

所以我有一个疑问: 在mytable(标识符,金额)中插入重复键上的值('identifer','some_number')更新金额=金额+some_number

基本上-如果我们没有行,插入它,如果有,添加some_编号

数字列为十进制(24,8)

当运行此函数时,某些_数等于72100312.72872099,并且当前行被调零为0.00000000,则数学结果为列为72100312.72872100

如果某个_编号为72100312.72872098,则可以正常工作。如果是72100312.72872101就可以了。如果我做了11111.72872099就好了

如果当前行不是零,而是.00000005,那么72100312.72872099将添加fine,总数将如预期的那样为72100312.72872104

好像它把数学搞砸了。我认为十进制列对此免疫

有没有办法解决这个问题,或者以更好的方式进行更新?我真的不想做选择,bcadd,然后更新。这种类型的行(在duoplicate更新时插入)在代码中出现大约120次。要选择/bcadd/update,有很多复古配件

附录:只需阅读MySQL服务器在5.0转换为浮点数之前的数学知识。我是5.5。这不是<5.0的问题


Edit2:客户端版本是mysqlnd 5.0.11-不确定这是否是问题的一部分?不过服务器应该在计算,对吗?

不太清楚您在这里使用十进制数作为键吗?如果是这样,通常需要检查两件事是否“相等”。与浮点数/小数相等通常是需要避免的。我不是。从来没说过我是。此外,即使我是,这与我的问题完全无关。请尝试,如果你能验证这一点