PHP数字\u格式错误

PHP数字\u格式错误,php,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\u格式化的值与另一个值以继续代码,如: $another_value = 20.40; if($value_f

我有一个字符串,比如:

R$10,25
我需要将其转换为:

10.25
我正在尝试:

$value = 'R$10,20';
$value_subs = str_replace(array('R', '$'), '', $value);
$value_formated = number_format($value_subs, 2, ',', '.');
之后,我将比较
$value\u格式化的
值与另一个值以继续代码,如:

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

如果($value_)是结合@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";
    }

结合@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";
    }

在PHP中,逗号不是默认的十进制分隔符,这就是为什么只考虑整数部分(因为逗号不被视为数字的一部分)

要解决此问题,需要将此逗号替换为点

一种方式:

$str = strtr($str, ['R' => '', '$' => '', ',' => '.']);
echo number_format($str, 2, ',', '.');
注意:使用
strtrtr
代替
str\u replace
可以避免循环替换,例如,如果您希望从原始字符串中删除用作千位分隔符的点而不影响十进制分隔符:

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

逗号不是PHP中默认的十进制分隔符,这就是为什么只考虑整数部分(因为逗号不被视为数字的一部分)

要解决此问题,需要将此逗号替换为点

一种方式:

$str = strtr($str, ['R' => '', '$' => '', ',' => '.']);
echo number_format($str, 2, ',', '.');
注意:使用
strtrtr
代替
str\u replace
可以避免循环替换,例如,如果您希望从原始字符串中删除用作千位分隔符的点而不影响十进制分隔符:

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

将逗号
替换为点
。您正在比较
10,20@roullie他们正在使用浮点数,而不是浮点数strings@roullie好的,但是错误仍然存在,如果我使用$value\u subs=floatval($value\u subs);正如下面的答案中提到的,我得到的是10.00,而不是10.25。将逗号
替换为点
。你是在比较
10,20@roullie他们使用的是浮点数,而不是浮点数strings@roullie好的,但是错误仍然存在,如果我使用$value\u subs=floatval($value\u subs);正如下面的答案中提到的,我得到10.00,不是10.25,这很好,但这显示的是20.00。有没有办法用点和零来显示?很好,但这显示的是20.00。有没有办法用点和零来显示?谢谢你的解决方案,但我已经接受了鲁利的答案!谢谢你的解决方案,但我一直都在想阿迪接受了鲁利的回答!