调整preg_replace字符串以隐藏价格的小数

时间:2012-05-02 20:28:40

标签: php preg-replace currency decimal

我有这段代码:

$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小数等于消失,如果等于零,则考虑当前符号的位置。

2 个答案:

答案 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);