代码之家  ›  专栏  ›  技术社区  ›  Carol.Kar

在叶片模板中将编号格式化为K/M/B

  •  1
  • Carol.Kar  · 技术社区  · 6 年前

    我用的是Laravel 5.7.19。

    在我的内心 TableController.php 控制器我从数据库中查询数据并将其移交给视图:

    public function index()
    {
    
        $c = DB::table('tick_data')
            ->select('*')
            ->join('basis', 'basis.Id', '=', 'tick_data.b_id')
            ->whereRaw('tick_data.id IN( SELECT MAX(tick_data.id) FROM tick_data GROUP BY tick_data.exchange_timestamp)')
            ->get();
    
        return view('datatable')->with('coins', $c);
    }
    

    在我的内心 table.blade.php 我要输出数据的文件:

                        @foreach ($coins as $key=>$c)
                            <tr>
                                <td>{{ ++$key }}</td>
                                <td>{{ $c->pair }}</td>
                                <td>{{ number_format($c->last_price, 8) }}</td>
                                <td>{{ number_format($c->price_change_percentage, 8) }}</td>
                                <td>{{ number_format($c->price_change, 8) }}</td>
                                <td>{{ number_format($c->high_price, 8) }}</td>
                                <td>{{ number_format($c->low_price, 8) }}</td>
                                <td>{{ $c->base_volume }}</td>
                                <td>{{ $c->name }}</td>
                            </tr>
                        @endforeach
    

    如你所见,我主要使用 number_format() 用于设置值格式的函数。

    然而, base_volume 以…的形式出现 467703.0000000000 10831.13202978000 我想把它改成短格式 K,M,B .

    刀刃上有什么能做到这一点的功能吗?什么是执行数字的好方法?

    感谢您的回复!

    1 回复  |  直到 6 年前
        1
  •  1
  •   Mozammil    6 年前

    我不知道有什么刀刃能做到这一点。但是,您可以使用 PHP Humanizer 用于此的包。例如,从他们的文档中:

    use Coduo\PHPHumanizer\NumberHumanizer;
    
    NumberHumanizer::metricSuffix(-1); // "-1"
    NumberHumanizer::metricSuffix(0); // "0"
    NumberHumanizer::metricSuffix(1); // "1"
    NumberHumanizer::metricSuffix(101); // "101"
    NumberHumanizer::metricSuffix(1000); // "1k"
    NumberHumanizer::metricSuffix(1240); // "1.2k"
    NumberHumanizer::metricSuffix(1240000); // "1.24M"
    NumberHumanizer::metricSuffix(3500000); // "3.5M"
    

    包的好处是,它还支持多个区域设置。

    编辑:还讨论了其他替代解决方案 here . 如果您只需要缩短数字,这可能是一个更好的选择。