假设我有一个表单,其中我询问产品的价格。基本上,我不考虑用户添加千位逗号的情况,即:10000.00或1000,000.00
我只考虑用户输入1000.00或1000,00或1000000.00的情况,但从不输入1,000.00或10,000,000.00或更糟糕的是,10.000.000,00
我想出了这个函数。
function getPrice($price)
{
if (is_string($price)) {
if (strpos($price, ",") !== false) {
$price = str_replace(',', '.', $price);
}
}
return (is_numeric($price)) ? floatval($price) : false;
}
你认为这个函数安全吗?你能指出改进的地方吗?
你的函数看起来很好,除了最后一行与floatval
。
我对这种方法的主要考虑是PHP
将不能正确地表示浮点数,这要归功于:floatval
,转换为float
或浮点变量的算术运算。
例如,PHP
可以根据精度集将10000.00转换为9999,99。(你可以在这里阅读更多关于http://php.net/manual/en/language.types.float.php)
如果你在解析到FLOAT
(在getPrice
函数中)之后需要这个价格进行一些算术计算,并且你需要精度,那么我的建议是避免解析到FLOAT
和
- 将它们保留为字符串并使用字符串进行计算
- 使用
BC MATH
扩展在php中进行更精确的数学运算