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

Hei*_*ein 4 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>";
?>
Run Code Online (Sandbox Code Playgroud)

为什么它会返回1?不要那样.

和:是的,有在转换到1.99 1.99从某种意义上说;-)

谢谢你的建议......

Ste*_*rig 6

问题是,PHP不会将,in 识别1,99为小数分隔符.该float类型被定义为具有以下正式定义:

LNUM          [0-9]+
DNUM          ([0-9]*[\.]{LNUM}) | ({LNUM}[\.][0-9]*)
EXPONENT_DNUM [+-]?(({LNUM} | {DNUM}) [eE][+-]? {LNUM})
Run Code Online (Sandbox Code Playgroud)

这意味着它只接受.小数分隔符.这实际上与为number_format无法在无效数据类型上发出警告的原因相同,因为它无法转换1,99float内部数据.

以下应该有效:

$float = "1,99";
echo "<p>$float<br>";
$val = number_format(str_replace(',', '.', $float), 2,'.', ',');
echo "$float</p>";
Run Code Online (Sandbox Code Playgroud)