Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 删除字符串右侧的特定字符_Php_String_Number Formatting_Trim_Money Format - Fatal编程技术网

Php 删除字符串右侧的特定字符

Php 删除字符串右侧的特定字符,php,string,number-formatting,trim,money-format,Php,String,Number Formatting,Trim,Money Format,我需要删除字符串末尾的零,但最多只能删除小数点右侧的2位 我得到了一个格式化的价格作为字符串传递,这个价格最多有5位小数。我需要从价格中去掉不必要的零,但在小数点右边至少保留2。例如: 0.00230英镑->0.0023英镑 和 1.5万英镑->1.50英镑 任何帮助都将不胜感激 最后一次更新,希望。。。修剪掉右边的所有零,然后根据需要添加1或2个零 function format_number($price) { if (preg_match('~^£\d+$~', $price))

我需要删除字符串末尾的零,但最多只能删除小数点右侧的2位

我得到了一个格式化的价格作为字符串传递,这个价格最多有5位小数。我需要从价格中去掉不必要的零,但在小数点右边至少保留2。例如:

0.00230英镑->0.0023英镑 和 1.5万英镑->1.50英镑


任何帮助都将不胜感激

最后一次更新,希望。。。修剪掉右边的所有零,然后根据需要添加1或2个零

function format_number($price) {
    if (preg_match('~^£\d+$~', $price)) {
        $price .= '.00';
    } else {
        $price = rtrim($price, '0');
        if (preg_match('~\.$~', $price)) {
            $price .= '00';
        } elseif (preg_match('~\.\d$~', $price)) {
            $price .= '0';
        }
    }
    return $price;
}
echo format_number('£230') . "\n";
echo format_number('£230.12') . "\n";
echo format_number('£23.024') . "\n";
echo format_number('£230.00024') . "\n";
echo format_number('£230.0240') . "\n";
echo format_number('£230.2') . "\n";
输出:

£230.00
£230.12
£23.024
£230.00024
£230.024
£230.20
请尝试以下代码:

$value = "0.00230";
$new_value = explode(".", $value);
$substring = substr($new_value[1], 0, 1);

if($substring == "00"){
  $value = number_format($value, 4, '.', '');
} else {
  $value = number_format($value, 2, '.', '');
}
echo $value;

您可以删除符号,强制转换为浮点以删除尾随零,并在需要时使用number_格式将其添加回:

function fixCurrency($string, $symbol){

    //remove £, and any trailing zeros
    $val = (float) ltrim($string, $symbol);
    //add back zeros if needed
    $parts = explode('.', $val);
    if(!isset($parts[1]) || strlen($parts[1]) < 2){
        $val = number_format($val, 2);
    }
    return $symbol . $val;

}

您的预期输出令人困惑,0.00230英镑->0.0023英镑结果是小数点后4位,但您的问题表明您只需要小数点后2位??我应该说,因为看起来我已经被激怒了!,我可以使用rtrim来修剪零,但我找不到不将零修剪到小数点后字符右侧的方法。如果价格为小数点后2位,例如1.50英镑,是的,我需要它来显示,但它显示的是1.50000英镑,你能告诉我们你尝试了什么,这样我们就可以解决它吗?对不起,史蒂夫没有暗示你这么做:问题是,我只需要2位小数,其中价格只需要显示2位,例如1.50英镑,但使用2位小数以上的价格应该显示,例如0.0023英镑。现在,使用rtrim剥离右零的工作到一个点,但它剥离太多,当你得到2个小数点的价格。我很感激,我不得不操纵一个字符串,这并没有让它变得更容易。简单地说,我想实现的是,在小数点字符的右边去掉所有右边的零,而不是2个零。我只是注意到,在Windows下,money_格式将是未定义的:,我猜是Linux时间。谢谢clayton刚刚尝试过这个,但它将小数点后5位舍入到2。耶,当我跑出家门而忽略了你帖子的那一部分时,我写了这篇帖子。我回家后会更新我的答案。我用一个简单的解决方案更新了我的答案。它将数字视为一个字符串,并且只在字符串末尾修剪1、2或3个零(如果存在)。这也假设字符串一直保留到小数点后5位,但根据您的帖子,听起来是这样的。如果我错了,你可能想试试这里的一个答案,因为我今天已经做完了,哈哈