我有这段代码:
$string = '/([\d,]+)\.(\d+)(.*)$/';
$condition = preg_replace($string, '$2', $price);
if ($condition == 00) {
$show = preg_replace($string, '$1$3', $price);
} else {
$show = preg_replace($string, '$1.$2$3', $price);
}
所以,如果我在执行代码后有这种格式的价格: 100.00€,价格会显示如下: 100€
但如果我在执行代码后有以这种格式的价格: $ 100.00 ,价格仍会显示如下: $ 100.00 即 00 < / strong>未修剪(加载 else 语句后第二个 $ show )。
$ price 是使用货币符号一起生成的,因此它不仅仅是纯数字。
任何建议如何实现这一点,无论货币位置(左或右)?
感谢。
PS 它不需要是这个代码,你可以建议另一个代码,只要它使00小数等于消失,如果等于零,则考虑当前符号的位置。
答案 0 :(得分:3)
<?php
$num = 126.54;
echo $num === round($num, 0) ? round($num, 0) : $num;
?>
这可以用来吐出你的号码。就货币头寸而言,您可以根据货币设置条件。
完整答案:此处理所有货币类型并将其置于正确的位置。享受:
<?php
$symbols = array('€', '$');
$price = '$126.56';
foreach($symbols as $needle)
{
if($pos = strpos($price, $needle) && $pos !== false)
break;
}
$num = floatval(str_replace($symbols, '', $price));
$num = $num === round($num, 0) ? round($num, 0) : $num;
echo $pos ? $num.substr($price, -1) : substr($price, 0, 1).$num;
?>
KISS方法:有时候,我们会对答案的复杂性感到困惑,我们忽略了简单的答案。我知道这有点晚了,但它可能会浪费掉很多不必要的代码。如果您的定价中保证有两个小数位,则仅使用此选项:
<?php
$rounded = str_replace('.00', '', $price);
?>
这将有效消除任何担心货币放置的需要。但请记住:如果您保证两位小数的定价格式,这仅适用于您的情况。
答案 1 :(得分:0)
这可以帮到你:
<强>更新强>
误读原帖并没有意识到你想保留货币符号。这应该做得很好而且简单,并不重要的是它是什么货币符号,或者它在哪里。
// Won't change this
$number = '$200.00';
echo preg_replace('/([.0-9]+)(€)/e','round(\'$1\',0)."$2"',$number);
// Will change this
$number = '200.00€';
echo preg_replace('/([.0-9]+)(€)/e','round(\'$1\',0)."$2"',$number);