我遇到了一个非常奇怪的 ¿bug?现在在 mysql+php 上。 是一个简单的选择,在下面的示例中,我使用多个字段来尝试解释我的问题:
- “字段”为 11.5
- $phpvar 为 1.15
MySQL 查询:
select round(field * " . $phpvar . " ,2) as a1,
round(field * 1.15 ,2) as a2,
round(11.5 * " . $phpvar . " ,2) as a3,
round(11.5 * 1.15 ,2) as a4,
field * " . $phpvar . " as a5
from ...
好的,我正在尝试获取 13.23。 "field"* $phpvar = 13.225
,所以使用 round(13.225,2) 我应该得到 13.23,对吗?嗯,是的,也不是。
查询结果:
- a1 [round(field * ". $phpvar . ",2)] => 13.22
- a2 [轮(场 * 1.15 ,2)] => 13.22
- a3 [round(11.5 * ". $phpvar . ",2)] => 13.23
- a4 [轮(11.5 * 1.15 ,2)] => 13.23
- a5 [field * ". $phpvar . "] => 13.225(不带圆)
我错过了什么?怎么可能,当涉及到使用“field”时,我的结果会得到一个假回合?
最佳答案
问题在于 DOUBLE 和 FLOAT 值的存储方式。
像 11.5 或 22.475 这样的值有可能(并且可能)存储为近似值,如 11.499999999999~ 或 22.475000000000000001,因此某些计算或舍入可能会导致不正确的结果。
最好将浮点值存储为 DECIMAL 类型,其中该值与所有十进制数字精确存储,而不是近似值。
关于php - MySQL 出现奇怪的 bug,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30463896/