计算三者之和;xxx欧元,xx欧元”;PHP/Javascript中的值

计算三者之和;xxx欧元,xx欧元”;PHP/Javascript中的值,javascript,php,Javascript,Php,目前我正在使用Amazon API,它以“EUR xxx,xx”(例如“EUR 23,99”)的格式返回可用的最低价格 现在我想计算三个价格的总和,但由于值不仅仅是数字,我不知道如何计算 我试过了 $a = $ergebnis['price1']; $b = $ergebnis['price2']; $c = $ergebnis['price3']; $string = "a + b + c"; $result = eval('return ' . preg_replace('/([a-zA-

目前我正在使用Amazon API,它以“EUR xxx,xx”(例如“EUR 23,99”)的格式返回可用的最低价格

现在我想计算三个价格的总和,但由于值不仅仅是数字,我不知道如何计算

我试过了

$a = $ergebnis['price1'];
$b = $ergebnis['price2'];
$c = $ergebnis['price3'];
$string = "a + b + c";

$result = eval('return ' . preg_replace('/([a-zA-Z0-9])+/', '\$$1', $string) . ';');
echo $result;
但这并没有返回结果。

u可以对每23,99欧元使用.split(“”)

var str = "EUR 23,99";
var result = str.split(" ");

split返回一个由分隔符分割的项目数组,在本例中为“”,因此您将得到EUR作为结果[0],23,99作为结果[1],因此您可以将所有项目转换为相同的货币,并从字符串转换数字,然后将其添加到总和中。我猜您将从API接收字符串。您只需将它们转换为数字即可使用它们进行计算:

$a = floatval($ergebnis['price1']);
$b = floatval($ergebnis['price2']);
$c = floatval($ergebnis['price3']);
函数
floatval()
返回浮点值。

替换分隔符(对于小数点到点,对于千点到逗号),您将能够对它们求和:

$price1 = explode(" ", $ergebnis['price1']);
$price2 = explode(" ", $ergebnis['price2']);
$price3 = explode(" ", $ergebnis['price3']);

$a = floatval(str_replace(',', '.', str_replace('.', '', $price1[1])));
$b = floatval(str_replace(',', '.', str_replace('.', '', $price2[1])));
$c = floatval(str_replace(',', '.', str_replace('.', '', $price3[1])));

$result = $a + $b + $c;
echo $result;
echo currencyToFloat($string); // EUR 23,99 --> 23.99
使用正则表达式:

$string = 'EUR 23,99';

function currencyToFloat($string) {
    return (float) preg_replace("/^[A-Z]{3}\s([\d]+)[,.]([\d]+)/", "$1.$2", $string);
}
它将转换一个三个字母的货币代码,加上一个空格,然后将任何数字(欧洲或国际格式)转换为浮点值

echo currencyToFloat($string); // EUR 23,99 --> 23.99

您需要遵循两个步骤:

  • 删除“欧元”
  • 转换为浮动
使用explode
explode(“,$price)[1]
按空格删除“EUR”explode字符串。然后,您要将逗号更改为点并转换为浮点,这可以通过
floatval()
str_replace()
完成


是$a=“EUR”、$b=xxx和$c=xx??否,$a=xxx,xx$b=xxx,xx$c=xxx,xx远离评估()。远,远。查看
floatval
EUR 24,99
这样的字符串上的行为(例如非数字最左边的字符)。我想从字符串中删除字符不是什么大问题,但可以:
preg_replace(“/[^0-9,]+/g”,“仅限$个数字”)
您忘记了货币部分(
24.99欧元
根据文档不能用floatval解析)。对,我没有注意到您有,对不起。我用
str\u replace
explode
更新了我的答案,比在字节级别运行的Regex使用了更多的内存和CPU周期。@mwieczorek我刚刚用1mln的迭代检查了我们的两个代码。你的代码比我的慢30-40%。将
floatval()
更改为
(float)
会产生40-55%的差异。