2016-11-08 68 views
2

假设我有一个表单,我要求产品的价格。基本上,我不考虑用户添加数千个逗号的情况,即:1,000.00或1,000,000.00PHP函数安全地返回字符串中的浮点数

我只考虑用户输入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; 
} 

您认为安全吗?你能指出改进吗?

+0

@Devon再次阅读这个问题......他不考虑1000.00的情况下只是1000.00 – Jackowski

+0

@Jackowski,你是对的,我第一次浏览。 – Devon

+0

字符串替换是不必要的,floatval已经将''''或'.'作为小数点分隔符。 – Devon

回答

1

除了最后一行floatval以外,你的功能对我来说看起来还行。

我对这种方法的主要考虑是PHP不会正确地代表float,这要归功于:floatval,转换为float或带有浮点变量的算术运算。

例如,PHP可能会根据精度设置将10000.00转换为9999,99。如果他们解析到FLOAT(在getPrice功能)后,需要这个价格有些算术运算(你可以阅读更多关于此这里http://php.net/manual/en/language.types.float.php

,你需要精度那么我的建议是避免解析到FLOAT,要么:

  • 离开他们的字符串,并做处理字符串的计算
  • 使用BC MATH扩展获得更精确的数学运算在PHP
+0

考虑到精度,我没有。我将删除floatval(),因为我将使用该数字进行算术运算。此外,链接+1和提及BC数学扩展。 –