在我的PHP项目中将字符串值解析为浮点值不一致。尽管我没有更改我的代码,并且要解析的值总是相同的,我有时会用逗号得到结果,有时会得到一个点。
传入的值例如是:35,59 在解析此值之前,我首先用点替换逗号。
$value = '35,59';
$value = (float)str_replace(',', '.', $value);
var_dump($value);
当我现在在插入查询中使用此值时,这有时会导致错误,因为使用了逗号。 这对我来说有点奇怪,有没有人经历过这个?我怎样才能防止这种情况发生?
修改 我确实忘记了这个例子中的引号,但我在代码中使用了引号
答案 0 :(得分:1)
$value = 35,59;
问题是解析器无法识别“,”作为小数分隔符。您的语言环境可以通过这种方式定义数字,但是必须以编程方式使用句点或将值声明为字符串。
$value = "35,59";
// or
$value = 35.59;
如果你得到35,59
,那必须是硬编码的,因为任何返回此值的数据源都会被自动视为字符串。
有关如何正确转换格式化字符串的信息,请参阅http://us2.php.net/numberformatter.parse。
即
$fmt = new NumberFormatter( 'sv_SE', NumberFormatter::DECIMAL );
$value = "35,59";
echo $fmt->parse($value); // 35.59
修改强>
此外,对于X个区域设置,您的str_replace
将失败,因为有些区域通常使用“,”作为千位分隔符。