因为PHP中的float数据类型不准确,并且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>";
Run Code Online (Sandbox Code Playgroud)
产量:
Price = string(4) "1.15"
Corrected price = float(115)
Integer price = int(114)
Run Code Online (Sandbox Code Playgroud)
我很惊讶.当最终结果低于预期值1时,我期待我的测试结果看起来更像:
Price = string(4) "1.15"
Corrected price = float(114.999999999)
Integer price = int(114)
Run Code Online (Sandbox Code Playgroud)
这将证明浮动类型的不准确性.但为什么楼(115)返回114?