【问题标题】:Modify decimal point and thousands separator without changing the number of decimals修改小数点和千位分隔符而不改变小数位数
【发布时间】:2017-10-20 09:00:24
【问题描述】:

我是 php 新手,我正在尝试使用 number_format :

number_format ( float $number , int $decimals = 0 , string $dec_point = "." , string $thousands_sep = "," )

如标题所示,我的目标是修改小数点和千位分隔符而不更改小数位数,如下所示:

$Num=123456.789;
$Num2=number_format ($Num, [decimals as in $Num], ",", "'" );

我的结果应该是:

$Num2="123'456,789";

编辑

我需要一个未知小数位数的代码

【问题讨论】:

  • $Num=123456,789; 是 php 的无效代码,应该是 $Num=123456.789; 在 php 中不支持命名参数,因此您必须传递默认值,这可以在函数签名中看到。
  • @Flying 我使用点而不是逗号为$Num 赋值。代码有效只有最终输出需要逗号,但它是一个字符串!

标签: php number-formatting


【解决方案1】:

您可以使用NumberFormatter。

您仍然需要指定一定数量的小数位数,但您可以使用足够高的值就可以了。这不像数字的数量真的是任意的。它与您的 precision ini setting 相关联。

$formatter = new NumberFormatter("en_US", NumberFormatter::DECIMAL);
$formatter->setAttribute(NumberFormatter::MAX_FRACTION_DIGITS, 42);
$formatter->setSymbol(NumberFormatter::GROUPING_SEPARATOR_SYMBOL, "'");
$formatter->setSymbol(NumberFormatter::DECIMAL_SEPARATOR_SYMBOL, ",");
echo $formatter->format(123456.7891234); // 123'456,7891234

演示 https://3v4l.org/TCAIA

【讨论】:

  • 不错,只是缺少我猜的格式,“123'456,789”
  • 感谢您的回答。只有一个问题:它在 web php 测试仪上完全符合我的要求,但在我的电脑上我收到错误 致命错误:找不到类'NumberFormatter'。我正在将 xampp 与 php 5.6.8 一起使用,并且我阅读了(在网络指南上)它从 5.3 版开始就可以使用 任何提示都表示赞赏
  • @genespos 您需要安装并启用 intl 扩展。检查 php.ini 中的 extension=intl.so 或 .dll 行并取消注释。之后重新启动 xamp。
  • 哎呀!现在很完美。再次感谢;)
  • 不错!非常感谢!
【解决方案2】:

你可以这样做(首先看看@Gordon 的回答——更好):

<?php

function extendedNumberFormat($num, $decimalSeparator, $thousandSeparator) {
    $asStr = strval($num);

    $exploded = explode('.', $asStr);
    $int = $exploded[0];
    $decimal = isset($exploded[1]) ? $exploded[1] : null;

    $result = number_format($int, 0, ".", $thousandSeparator);
    if ($decimal !== null) {
        $result .= $decimalSeparator . $decimal;
    }

    return $result;
}

echo extendedNumberFormat(123456.789, ',', "'") . "\n";
echo extendedNumberFormat(123456.7891, ',', "'") . "\n";
echo extendedNumberFormat(123456, ',', "'") . "\n";

//123'456,789
//123'456,7891
//123'456

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-07
    • 1970-01-01
    • 2014-02-18
    • 1970-01-01
    • 2013-09-02
    • 1970-01-01
    相关资源
    最近更新 更多