我有这个PHP代码:
<?php
$float = "1,99";
echo "<p>$float<br>";
$float = floatval($float); // Without this line number_format throws a notice "A non well formed numeric value encountered" / (float) $float leads to the same output
$val = number_format($float, 2,'.', ',');
echo "$float</p>";
?>
为什么会返回1?不要那样做。
并且:是的,是将1,99转换为1,99的感觉; - )
感谢您的建议......
答案 0 :(得分:6)
问题是,PHP无法将,
中的1,99
识别为小数点分隔符。 float
类型定义为具有以下formal definition:
LNUM [0-9]+
DNUM ([0-9]*[\.]{LNUM}) | ({LNUM}[\.][0-9]*)
EXPONENT_DNUM [+-]?(({LNUM} | {DNUM}) [eE][+-]? {LNUM})
这意味着它只接受.
作为小数点分隔符。这实际上与number_format
对无效数据类型发出警告的原因相同,因为它无法在内部将1,99
转换为float
。
以下内容应该有效:
$float = "1,99";
echo "<p>$float<br>";
$val = number_format(str_replace(',', '.', $float), 2,'.', ',');
echo "$float</p>";
答案 1 :(得分:3)
floatval将逗号(,)识别为字符而不是数字,因此它会切断后面的所有内容。在这种情况下,这是99.请使用点(。)而不是逗号(,),它可能会工作。
示例floatval(来源:http://php.net/manual/en/function.floatval.php):
<?php
$var = '122.34343The';
$float_value_of_var = floatval($var);
echo $float_value_of_var; // 122.34343
?>
答案 2 :(得分:1)
1,99不是有效的php浮动。问题是你的逗号(,)。在PHP中,您必须使用点(。)作为浮点分隔符。
<?php
$float = "1.99";
echo "<p>$float<br>";
$float = (float)$float;
$val = number_format($float, 2,'.', ',');
echo "$float</p>";
?>