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



我有这个代码:

$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 没有被修剪(加载 else 语句后的第二个$show)。

$price是用货币符号一起生成的,因此它不仅仅是一个纯数字。

任何建议如何实现,无论货币位置(左或右)?

谢谢。

附言它不需要是这个代码,你可以建议另一个,只要它使 00 位小数消失,如果等于零,关于 currecy 符号的位置。

<?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);
?>

这将有效地消除任何担心货币放置的需要。但请记住:这仅适用于您保证定价格式正好两位小数的情况下。

这应该可以帮助您:

更新

误读了您的原始帖子,没有意识到您想保留货币符号。这应该可以很好地和简单地解决问题,它是什么货币符号或它在哪里并不重要。

// 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);

最新更新