删除短数字中为0的小数


Remove decimal in shorted number where is 0

我使用了一个函数来缩短数字。比如10k、30M等。我希望只有一个小数(4.9K),但前提是它与0不同。我需要7k而不是7.0K。我该怎么做?我试过str_replace,但它不起作用。有什么解决方案吗?

function num_short($n, $precision = 1) {
    if ($n < 1000) {
        $n_format = number_format($n);
    } else if ($n < 1000000) {
        $n_format = number_format($n / 1000, $precision) . 'K';
    } else if ($n < 1000000000) {
        $n_format = number_format($n / 1000000, $precision) . 'M';
    } else {
        $n_format = number_format($n / 1000000000, $precision) . 'B';
    }
    $n_format = str_replace("",".0",$n_format);
    return $n_format;
}

@Amadan正在做某事。。。阿玛丹不愿解释的事情。

您可以将对number_format的呼叫替换为round,如下所示:

function num_short($n, $precision = 1) {
    if ($n < 1000) {
        $n_format = round($n);
    } else if ($n < 1000000) {
        $n_format = round($n / 1000, $precision) . 'K';
    } else if ($n < 1000000000) {
        $n_format = round($n / 1000000, $precision) . 'M';
    } else {
        $n_format = round($n / 1000000000, $precision) . 'B';
    }
    return $n_format;
}

但只有当四舍五入是你想要的时,这才是好的,例如:

echo num_short(5000, 1); //outputs 5K
echo num_short(5400, 1); //outputs 5.4K
echo num_short(5900, 1); //outputs 5.9K
echo num_short(5990, 1); //outputs 6K

你可以在Ideone.com上看到它的工作。

注意:我还将您的问题中的代码在Ideone.com上进行了测试,它给出了:

echo num_short(5000, 1)."'n"; //outputs 5.0K
echo num_short(5400, 1)."'n"; //outputs 5.4K
echo num_short(5900, 1)."'n"; //outputs 5.9K
echo num_short(5990, 1)."'n"; //outputs 6.0K

对此,我们可以看到number_format以相同的方式循环。

round($n / 1000000, $precision) . 'M'

编辑:它不会删除所有小数,除非您的$n超过浮点精度限制:

echo round(12345678 / 1000000, 1) . 'M';
=> 12.3M

来自@Theraot的公正评论。对于不取整,您可以使用:

(floor($n / (1000000 / pow(10, $precision))) / pow(10, $precision)) . 'M'

示例:

echo (floor(12345678 / (1000000 / pow(10, 1))) / pow(10, 1)) . 'M';
=> 12.3M