【发布时间】:2023-03-14 04:05:01
【问题描述】:
我正面临一个非常奇怪的¿错误?现在在 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 [round(field * 1.15 ,2)] => 13.22
- a3 [round(11.5 * " . $phpvar . " ,2)] => 13.23
- a4 [round(11.5 * 1.15 ,2)] => 13.23
- a5 [field * " . $phpvar . "] => 13.225 (无圆)
我错过了什么?怎么可能,在使用“字段”时,我的结果是假的?
【问题讨论】:
-
字段在数据库中是如何定义的?
-
选择字段 * 1.15 和 11.5 * 1.15 也不进行四舍五入,如 a6 和 a7 并发布结果。
-
安杰尔“场”是双倍的;; jishi select field * 1.15 返回 13.225;;选择 11.5 * 1.15 返回 13.25;; Nick 据我所知,mysql 上的 ceil() 返回“不小于 X 的最小整数值”,不带小数
-
我猜 DB 列中的 11.5 可能存储为 11.499999999999~ 因此 11.4999999999~ * 1.15 将是 13.224999999~ 因此 round(13.224999999999~, 2) 将导致 13.22。这取决于列类型。