【问题标题】:Simple number format from api来自 api 的简单数字格式
【发布时间】:2016-11-07 13:18:08
【问题描述】:

我正在从 api 中提取一个数字。我直接调用值时的输出是

1597188700000000

页面上想要的输出是

15, 971, 887

我正在尝试的是

function formatMoney($number, $fractional=false) { 
    if ($fractional) { 
        $number = sprintf('%.2f', $number); 
    } 
    while (true) { 
       $replaced = preg_replace('/(-?\d+)(\d\d\d)/', '$1,$2', $number); 
       if ($replaced != $number) { 
          $number = $replaced; 
       } else { 
          break; 
       } 
    } 
    return $number; 
} 

然后formatMoney($totala)($totala 是来自 api 的金额),我在页面上看到了

1,597,188,700,000,000

感谢任何帮助

【问题讨论】:

  • 你把什么输入交给那个函数?那么$number$fractional 是什么?
  • 无.. 我从 php.net 手册中获取了这个。
  • 在调用该函数时必须指定一个参数,无论该函数来自何处。
  • 自己试过了,这个功能对我来说很好。

标签: php number-formatting


【解决方案1】:

货币格式是从右到左的 3 位数组。

问题是您的电话号码应该是多少: 1597188700000000 还是 15971887?

您需要确定单位是什么,然后将其更改为所需的格式。如果您想要 1597188700000000 中的“15、971、887”。 您需要从 api 获取每个数字并执行:1597188700000000/100000000 然后格式化。

我认为这个问题是毫无意义的,你还没有考虑过你在做什么。

【讨论】:

  • 实际上,当我喜欢formatMoney($totala/100000000, true);时,这是有效的
  • 是的,但是 1597188700000000 != 15971887。如果你去商店,价格是 1000 美元,那么它不是 1 美元。你必须知道单位是什么。如果您的号码需要设置在 16 个位置(我猜这是一个问题):1597188700000000 您应该像这样保存它:000000001597188。当您的号码类似于:000000159718800 时,它将有效,所以 159718800。
  • 如果您有权访问源数据 - 您可以尝试保存值 1。它应该保存 000000000000001 而不是 100000000000000
  • 我无法控制从 api 收到的内容。我只知道我需要在页面15, 971, 887 上显示收到的号码是1597188700000000,即精确除以100000000
  • 你能用其他记录验证值,它也应该除以 100000000 吗?当你的答案是肯定的:你应该每次都分开。如果不是:您没有机会猜出您的号码是多少。可能的解决方案是更改数字保存到源数据库的方式,或重新验证您的 API 连接器,并检查您的格式是否错误。
【解决方案2】:

以下将格式化您的号码,用, 分隔千位,并从号码的右侧去除所有零。

$formattedNumber = number_format(rtrim($number, '0'), 0, ',', '.');

【讨论】:

  • 为什么 OP 应该“试试这个”? 好的答案将始终解释所做的事情以及为什么以这种方式完成,不仅是为了 OP,也是为了 SO 的未来访问者。跨度>
  • 这不起作用。它返回Wrong parameter count for number_format()。编辑前的第一个。
  • 编辑了答案。
  • 我喜欢这种方法(即使我不确定是否正确),因为只有一行,我可以删除该功能。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-06
  • 1970-01-01
  • 1970-01-01
  • 2016-01-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多