来自数组的字符串,其格式如下:436,97 €
不能被修剪成类似这样的436.97
,这就是为什么无法使用{{1 }}。
我正在尝试添加两个字符串,一个是我声明自己的字符串,并用bcadd()
初始化,另一个是来自数组并具有以下格式的字符串:"0.00"
我尝试了几种方法,但是在436,97 €
的输出为0.00。我在那里做错了什么?
我试图简化代码以将其发布到这里,并且可以正常运行:
bcadd()
我不知道为什么我的程序中没有实际的代码,但是我也会在注释中加上它:
首先,我初始化变量,然后调用函数来增加/减少,具体取决于来自数组的值。 (整个构造都在循环内)。
我在这里删除了许多if .. else块,以使其更易于阅读。
<?php
$totalToAdd = "0.00";
$amount = "436,97 €";
$amount = trim($amount, "€");
$amount = str_replace(",",".",$amount);
$amount = trim($amount," ");
$totalToAdd = bcadd($totalToAdd, $amount,2);
echo $totalToAdd;
?>
这是被调用的函数:
$totalToAdd = "0.00";
$totalToAdd = $this->_updateSubtotal($totalToAdd, $totalData['label'],$totalData['amount']);
函数的返回值始终为protected function _updateSubtotal($total, $label, $amount){
$amount = trim($amount, "€");
$amount = str_replace(",",".",$amount);
$amount = trim($amount," ");
$total = bcadd($total, $amount,2);
return $total;
}
我尝试使用以下两个命令来一步一步修剪字符串:
$total = 0
trim($amount, " €");
但是在两种情况下,trim($amount, "\x20€");
的值都是:
$amount
我也尝试过substr():
$amount = "436,97 "
但这导致:
substr($amount,0,-2);
所以我尝试了2个步骤进行修整,但这是发生了以下情况:
$amount = "436,97 �"
也许这就是为什么bcadd()不起作用的原因?
如何摆脱空白?
我更改了代码,不直接使用数组值$amount = trim($amount, "€"); -> $amount = "436,97 "
$amount = str_replace(",",".",$amount); -> $amount = "436.97 "
$amount = trim($amount," "); -> $amount = "436.97 "
来调用函数,而是使用了附加变量:$ amount,因此函数调用如下所示:
$totalData['amount']
并将金额从数组写入$totalToAdd = $this->_updateOwnSubtotal($totalToAdd, $totalData['label'],$amount);
之前。我尝试了这些方法,但都无效:
$amount
和$amount = $totalData['amount'];
然后,我通过将字符串直接写入变量$amount = "" . $totalData['amount'];
来很好地工作,从而在没有数组的情况下进行了尝试。
所以我的数组中的值一定有问题。它们应该是字符串,当我尝试is_string()或gettype()时就是它们。
什么可能导致此问题?
答案 0 :(得分:0)
我能够使用mb_substr
解决此问题:
$amount = mb_substr($amount,0,-2, 'UTF-8');
Input: "436,97 €" -> Output: "436.97"
并且bcadd()最终可以在没有其他空格的情况下工作。