【问题标题】:How to format numbers with thin space as a thousand separator?如何将带有稀疏空间的数字格式化为千位分隔符?
【发布时间】:2012-11-25 12:53:27
【问题描述】:

而不是显示格式如下的数字:

1,234,567.890,我想显示如下格式的数字:

1 234 567.890,与此略有不同:
1 234 567.890。

我正在使用 PHP 函数:

number_format($value, 0, ".", " ")

但是,它会产生这个:

1�234�567.890

我已经将 http 标头和 html 文档设置为 UTF-8。我相信这个问题的出现是由于薄空间是一个多字节字符。我一直没能找到处理这个问题的 mb 字符串函数。

有人知道如何处理这个问题吗?

【问题讨论】:

  • "5.4.0 这个函数现在支持 dec_point 和数千个字节中的多个字节。旧版本中只使用了每个分隔符的第一个字节。" - 是的,看起来像你'将不得不推出你自己的实现(或升级 PHP)。
  • 你确定这段代码不能正常工作吗:number_format(1234567890, 0, '.', ' ');
  • @deceze,啊..很好。我明白了.. 谢谢,那我需要升级。
  • 你也可以在这里查看不同版本的PHP的结果:3v4l.org/mKqfT

标签: php number-formatting multibyte


【解决方案1】:

5.4.0 此函数现在支持 dec_point 和数千个字节中的多个字节。在旧版本中只使用了每个分隔符的第一个字节。

http://php.net/number_format

基于此,对于旧 PHP 版本中的问题,这是一个非常 hacky 的解决方案,没有滚动您自己的 number_format 实现:

$separator = ' ';
echo preg_replace('/(?<=\d)\x' . bin2hex($separator[0]) . '(?=\d)/',
                  $separator,
                  number_format($value, 0, '.', $separator));

【讨论】:

  • 你总是帮了大忙 :)
【解决方案2】:

在较新 (>5.4.0) 的 PHP 版本中,直接使用细空格作为分隔符,如下所示:

number_format($value, 0, ".", "&thinsp;");

【讨论】:

    猜你喜欢
    • 2013-05-16
    • 1970-01-01
    • 2020-10-16
    • 2016-10-03
    • 2017-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多