PHP - 小数点后的floatval切割位置?

时间:2011-09-29 08:41:39

标签: php floating-point decimal

我有这个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的感觉; - )

感谢您的建议......

3 个答案:

答案 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>";
?>