9

编辑:下面的函数现在正确地做了缩写,实现了@Asad 的解决方案

嗨,我目前正在开发一个点赞按钮,我的所有基本功能都运行良好,但是我已经开始使用数字缩写代码并碰壁,因为我不知道如何使缩写更精确。

我有一个数字,例如 1000、1230、1500、154000、1500000、1000000

我想用缩写格式化它们。IE

如果是一千,则为 1k、1.1k、2k、10k、10.5k 等...

等等数万,数十万和数百万等......

目前我有以下功能,但还不够具体:

function abreviateTotalCount($value) 
{

    $abbreviations = array(12 => 'T', 9 => 'B', 6 => 'M', 3 => 'K', 0 => '');

    foreach($abbreviations as $exponent => $abbreviation) 
    {

        if($value >= pow(10, $exponent)) 
        {

            return round(floatval($value / pow(10, $exponent))).$abbreviation;

        }

    }

}

提前致谢!

4

5 回答 5

6

如果要保留小数位,请使用 floatval 而不是 intval:

return round(floatval($value / pow(10, $exponent)),1).$abbreviation;

获取浮点表示并四舍五入到小数点后 1 位。

于 2012-10-24T13:13:52.253 回答
2

检查该项目 https://github.com/gburtini/Humanize-PHP/blob/master/Humanize.php

php > echo HumanizePHP::intword(256,0,0);
3 hundred
php > echo HumanizePHP::intword(256,0,1);
2.6 hundred
php > echo HumanizePHP::intword(256,0,2);
2.56 hundred

至少你可以从这个实现中得到灵感

于 2012-10-24T13:16:46.043 回答
1

代替 intval(),使用number_format()为您提供具有所需小数位数的数字。

于 2012-10-24T13:19:08.270 回答
0

您可以宁愿使用来自 GITHUB https://github.com/prezine/numb的这些解决方案

$numb = new numbConverter() echo $numb->__main('1400000'); //output => 1.4M

一个非常易于使用的解决方案

于 2018-07-12T12:38:57.073 回答
0

如果您希望支持 0、负数和更大的数字,例如 Decillions,您可以试试这个 :)

function numberAbbreviation($number, $floating_points = 1) {

    $a = ['', 'K', 'M', 'B', 't', 'q', 'Q', 's', 'S', 'o', 'n', 'd'];
    $n = intval($number);
    $i = intdiv(strlen((string) $n) - 1, 3);
    $m = isset($a[$i]) ? $a[$i] : '';
    $e = $floating_points;

    return number_format($n / (1000 ** $i), $m ? $e : 0) . $m;
}
于 2021-12-28T14:20:41.580 回答