PHP函数安全地从字符串返回浮点值
比如说,我有一个表格,要求提供产品的价格。基本上,我不考虑用户添加数千逗号的情况,即:1000或1000000</p>。PHP函数安全地从字符串返回浮点值,php,type-conversion,Php,Type Conversion,比如说,我有一个表格,要求提供产品的价格。基本上,我不考虑用户添加数千逗号的情况,即:1000或1000000</p>。 我只考虑用户输入1000或1000,00或1000000,但从来没有1000,或10000000,甚至最坏,10000,0.00,00 < /P>的情况。 我提出了这个函数 function getPrice($price) { if (is_string($price)) { if (strpos($price, ",") !== false) {
我只考虑用户输入1000或1000,00或1000000,但从来没有1000,或10000000,甚至最坏,10000,0.00,00 < /P>的情况。 我提出了这个函数
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。(您可以在此处了解更多信息)
如果在解析到FLOAT
(在getPrice
函数中)之后,您需要将这些价格用于某些算术计算,并且需要精度,那么我的建议是避免解析到FLOAT
,并且:
- 将它们保留为字符串,并使用字符串进行计算
- 使用
extension在php中进行更精确的数学操作BC MATH
、
或
视为十进制分隔符。+1用于考虑精度,我没有这样做。我将删除floatval(),因为我将对该数字进行算术运算。另外,+1表示链接和BC数学扩展。