PHP number_format错误

时间:2016-09-14 02:25:40

标签: php

我有一个字符串:

R$10,25

我需要将其转换为:

10.25

我正在尝试:

$value = 'R$10,20';
$value_subs = str_replace(array('R', '$'), '', $value);
$value_formated = number_format($value_subs, 2, ',', '.');

在我将$value_formated值与另一个值进行比较后,继续执行代码,例如:

$another_value = 20.40;
if($value_formated <= $another_value)
{
    //Error
}
else
{
    //Proceed
}

但我收到错误 遇到格式错误的数值
怎么做到这一点?请记住,我从客户端收到$value变量的值,因此,此处可以显示任何内容,但如果不符合if($value_formated <= $another_value),我只会通过它。

2 个答案:

答案 0 :(得分:2)

结合@Hayden Schiff的回答

<?php

    $value = 'R$10,20';
    $value_subs = str_replace(array('R', '$',','), array('','','.'), $value);
    $value_formated = floatval($value_subs);

    $another_value = 20.40;
    if($value_formated <= $another_value)
    {
        echo "Less or equal";
    }
    else
    {
        echo "Greater";
    }

,替换为.,然后将结果解析为浮点数

答案 1 :(得分:0)

逗号不是PHP中的默认小数点分隔符,这就是为什么只考虑整数部分(因为逗号不被视为数字的一部分)。< / p>

要解决此问题,您需要用点替换此逗号。

一种方式:

$str = strtr($str, ['R' => '', '$' => '', ',' => '.']);
echo number_format($str, 2, ',', '.');

注意:使用strtr代替str_replace可能会有趣,以避免圆形替换,例如,如果您要从原始字符串中删除用作千位分隔符的点而不影响小数分离器:

$str = strtr('R$100.000.000,25', ['R' => '', '$' => '', ',' => '.', '.' => '']);
echo number_format($str, 2, ',', '.');