PHP - 添加千位分隔符但删除尾随零

3

我正在尝试使用PHP格式化数字,以达到以下目的:

  1. 去除所有末尾的零

  2. 在千位数处添加逗号分隔符

  3. 保留两位小数,如果小数部分不为零

我尝试了以下方法,但它并没有完全达到我的要求:

$prices[$title]['reg_price'] = (float)number_format($membership->sell_price, 2, ".", "");
$prices[$title]['three_year_price'] = (float)number_format($membership->attributes[$aid]->options[$three_year_oid]->price, 2, ".", "");

我发现将数字转换为浮点数可以去掉尾部的零。然而,我发现我需要告诉number_format不使用千位分隔符,否则,当将1,500.00转换为浮点数时,结果为1。
因此,总结一下,我想让我的代码将1500.00更改为1,500,将150.00更改为150,将19.99保持为19.99。怎样才能实现这一点?
4个回答

8
function parseCurrency($value) {
    if ( intval($value) == $value ) {
        $return = number_format($value, 0, ".", ",");
    }
    else {
        $return = number_format($value, 2, ".", ",");
        /*
        If you don't want to remove trailing zeros from decimals,
        eg. 19.90 to become: 19.9, remove the next line
        */
        $return = rtrim($return, 0);
    }

    return $return;
}

$prices[] = parseCurrency(1500.00);
$prices[] = parseCurrency(1500.10);
$prices[] = parseCurrency(1500.1);
$prices[] = parseCurrency(1500);
$prices[] = parseCurrency(123.53);
$prices[] = parseCurrency(1224323.53);
$prices[] = parseCurrency(19.99);

print_r($prices);

输出:

Array
(
    [0] => 1,500
    [1] => 1,500.1
    [2] => 1,500.1
    [3] => 1,500
    [4] => 123.53
    [5] => 1,224,323.53
    [6] => 19.99
)

1
这正好符合我的需求(是的,我会删除rtrim行)。谢谢! - user1015214

2
这将插入逗号,保留2位小数,去除尾随零,并删除尾随“。”符号:
rtrim(rtrim(number_format($value,2),0),'.')

0

你可以使用

ltrim($var, '0'); 

去掉前导的0。并且

rtrim($var, '0');

去除尾随。


这个还不完美 - 数字末尾仍然有小数点,我仍需要检查数字以查看最后一个字符是否为 . ,如果是,则将其删除。 - user1015214

-1

如果要将“.”替换为“,”,您可以使用以下函数:

function replace_dot($value) {
    $str = str_replace('.', ',', $value);
    return $str;
}

这里还需要一些额外的代码:它将把19.99转换为19,99。 - user1015214
你可以在感觉舒适的情况下使用该函数,如果是19.99,则不要使用它。或者你可以添加 if (strlen($str) !=5) { //执行替换语句 } - Alex
但是你打算如何使用这个函数呢?在你的例子中$value是什么?我可以创建数字1500或1,500.00,但你的函数对此都没有帮助。 - user1015214
当然可以。我只是想说,我的代码输出的是1500或者1,500.00,将它们中的任何一个输入到你的函数中都不会得到1,500这个结果。 - user1015214
@Alex,你有没有看清他想要什么?1)删除所有尾随的零,2)为千位分隔符添加逗号,3)列出两个小数点,假设它们不是零。你的建议没有做到这些,只是将小数点从.(点)替换为,(逗号),没有删除尾随零或添加,(逗号)作为千位分隔符。 - Kirbo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接