php - MySQL 出现奇怪的 bug

标签 php mysql

我遇到了一个非常奇怪的 ¿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/

相关文章:

php - 将 mysql 查询存储到 php 变量后发出 undefined variable

php - 如何使用 AFNetworking 2.0 检查 Wordpress 登录信息?

php - 连接到目标机器上的 mySql 数据库的问题

MySQL : using sum in( case when ) statement shows 0 as result

php - 如何在用户定义的公式中比较数据库中的数据

mysql - MariaDB 更新报错 inner join 和 select

php - 无法识别数据库 PHP MYSQLi 中的密码

python - 在 PHP 中使用 shell_exec 长时间运行的 Python 脚本没有返回结果

php - 显示来自多个 MySQL 表的数据

php - 检查连接中是否存在记录并分配并计数