【问题标题】:PHP number abbreviatorPHP 数字缩写
【发布时间】:2012-10-24 13:05:28
【问题描述】:

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

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

我有一个号码,例如1000、1230、1500、154000、1500000、1000000

我想用缩写来格式化它们。即

如果是一千,那么 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;

        }

    }

}

提前致谢!

【问题讨论】:

  • 这是一个很好的解决方案,“不够具体”是什么意思?
  • 您当前的代码有什么问题?不行吗?
  • @Asad 嗨,不幸的是,它只返回我想要的缩写的完整版本。即 1k、2k,但中间没有
  • 不清楚你想要什么。如果你有1234567890,你要返回“1.23456789B”吗?
  • @pedrosorio 嗨,它在描述中:如果是一千,那么 1k、1.1k、2k、10k、10.5k 等等......

标签: php function math exponent


【解决方案1】:

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

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

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

【讨论】:

  • 做到了。谢谢,如果允许我会接受答案
【解决方案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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

      • 7 岁的问题兄弟,另外,接受的答案比包含一个完整的包更简单,此外,您的包包含多种语言的代码,这是不好的做法。跨度>
      • 嗯,像我这样的新人可能会偶然发现这个问题并想要一个答案,而且它包含多种语言,只要您想使用任何可用的语言......
      • 关键是我们希望您使用已接受的答案,这有点多一点您插入您的图书馆不是吗? :) 不要误会我的意思,参与其中等等......但尝试在这里回答问题,而不是插入您构建的库。例如通过在你用来实现它的库中显示代码,因为这将形成一个更好的答案,更多的人可能会赞成;)
      • 大声笑',好的...注意。在更多人之前,成为支持投票的人......而我将答案编辑为形成性而不是广告
      【解决方案5】:

      如果您希望支持 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;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-02
        • 1970-01-01
        • 2014-02-26
        • 2017-11-03
        • 2017-12-10
        • 2011-07-24
        • 1970-01-01
        相关资源
        最近更新 更多