因为 PHP 中的浮点数据类型不准确,并且 MySQL 中的 FLOAT 占用的空间比 INT 多(并且不准确),所以我总是将价格存储为 INT,在存储之前乘以 100 以确保我们有 2 个小数位的精度. 但是我相信 PHP 行为不端。示例代码:
echo "<pre>";
$price = "1.15";
echo "Price = ";
var_dump($price);
$price_corrected = $price*100;
echo "Corrected price = ";
var_dump($price_corrected);
$price_int = intval(floor($price_corrected));
echo "Integer price = ";
var_dump($price_int);
echo "</pre>";
产生的输出:
Price = string(4) "1.15"
Corrected price = float(115)
Integer price = int(114)
我很惊讶。当最终结果比预期低 1 时,我希望测试的输出看起来更像:
Price = string(4) "1.15"
Corrected price = float(114.999999999)
Integer price = int(114)
这将证明浮点类型的不准确性。但是为什么 floor(115) 返回 114?