【问题标题】:Number formatting (Money) in PHPPHP中的数字格式(金钱)
【发布时间】:2020-01-19 17:11:20
【问题描述】:

我正在尝试格式化不带小数点或逗号的数字,我尝试了 number_format() 和 money_format(),但似乎无法得到我需要的结果。


number_format($item->amount,2)

结果:1​​4,995.00


money_format("%i", $item->amount)

结果:1​​4,995.00


我想让以下数字的格式正确。

14995 需要 149.95 英镑

6795 需要 67.95 英镑

获得上述结果的最佳方法是什么?

【问题讨论】:

  • 您能否给我们一些代码,尤其是您为number_formatmoney_format 尝试过的代码?
  • @Jb31 用结果更新了问题,谢谢
  • 你表示数字的方式很奇怪:为什么 14995 应该打印为 1,499.50(所以 14995 / 10)而 6795 应该打印为 67.95(所以 6795 / 100)?
  • @Jb31 价值就是金钱,它是来自 API 的响应,我需要像金钱一样友好地阅读,所以 6795 将是 67.95 英镑才能显示在网站上。

标签: php numbers currency


【解决方案1】:

使用brick/money(免责声明:我是作者):

use Brick\Money\Money;

// Instantiating from a decimal amount

$money = Money::of('67.95', 'GBP');
echo $money->formatTo('en_GB'); // £67.95

// Instantiating from a minor amount (cents)

$money = Money::ofMinor(6795, 'GBP');
echo $money->formatTo('en_GB'); // £67.95

【讨论】:

    【解决方案2】:
    setlocale(LC_MONETARY, 'en_GB.UTF-8'); // change if needed
    echo money_format('%n', 6795 / 100);
    

    返回

    67.95 英镑

    对我来说,应该可以。正如我在评论中提到的,您可能无法让代码同时将 14995 显示为 1,499.50(除以 10)和将 6795 显示为 67.95(除以 100),因此我建议相应地重构代码。

    【讨论】: