因为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??