从字符串安全返回浮点数的PHP函数


PHP function to safely return a float from string

假设我有一个表单,其中我询问产品的价格。基本上,我不考虑用户添加千位逗号的情况,即: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中进行更精确的数学运算