Php 删除字符串右侧的特定字符
我需要删除字符串末尾的零,但最多只能删除小数点右侧的2位 我得到了一个格式化的价格作为字符串传递,这个价格最多有5位小数。我需要从价格中去掉不必要的零,但在小数点右边至少保留2。例如: 0.00230英镑->0.0023英镑 和 1.5万英镑->1.50英镑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))
任何帮助都将不胜感激 最后一次更新,希望。。。修剪掉右边的所有零,然后根据需要添加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位,但根据您的帖子,听起来是这样的。如果我错了,你可能想试试这里的一个答案,因为我今天已经做完了,哈哈