修改小数点和千位分隔符,不改变小数位数

Modify decimal point and thousands separator without changing the number of decimals

我是 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";

编辑

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

你可以这样做(先看看@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

您可以使用 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