PHP函数从字符串安全地返回一个浮点数

时间:2016-11-08 13:01:10

标签: php type-conversion

我们说我有一个表格,我要求产品的价格。基本上,我不会考虑用户添加数千个逗号的情况,即:1,000.00或1,000,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;
}

你觉得这个功能安全吗?你能指出改进吗?

1 个答案:

答案 0 :(得分:1)

除了最后一行PHP之外,你的功能看起来还不错。

我对这种方法的主要考虑是floatval不能正确表示float,这要归功于:float,转换为PHP或使用浮点变量进行算术运算。

例如,FLOAT可以将10000.00转换为9999,99,具体取决于精度集。 (你可以在这里阅读更多相关信息ionSelect

如果在将它们解析为getPrice(在FLOAT函数中)并且您需要精度之后需要这些算术计算的价格,那么我的建议是避免解析为{ {1}}和其中之一:

  • 将它们保留为字符串并使用字符串进行计算
  • 使用BC MATH扩展名在php
  • 中进行更精确的数学运算