因为PHP中的float数据类型不准确,而且MySQL中的FLOAT占用的空间比INT多(且不准确),所以我总是将价格作为INTs存储,在存储之前将其存储为100,以确保我们有精确的2位小数的精度。不过我相信PHP是行为不端的。示例代码:php intval()和floor()的返回值太低?
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)
这将显示出float类型的不准确性。但为什么楼(115)返回114?
这实际上与PHP没有任何关系,并且与所有计算机如何处理浮点数据有关。如果您之前没有遇到浮点错误,则可能需要阅读该主题。 – jmucchiello 2009-05-01 19:24:40
@jmucchiello,我不同意。我明白计算机如何处理浮点数据,这就是为什么我使用整数数据的原因。这是一个PHP问题,当底层数据显示为114.99999999时,PHP显示115 ... – Josh 2009-05-01 19:29:20