Отформатируйте номер в K / M / B в шаблоне лезвия - PullRequest
0 голосов
/ 06 января 2019

Я использую 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 Ответ

0 голосов
/ 06 января 2019

Я не знаю ни одной функции лезвия, которая могла бы сделать это. Однако для этого вы можете использовать пакет 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"

Хорошо, что пакет также поддерживает несколько локалей.

Изменить: Есть также другие альтернативные решения, как обсуждено здесь . Это может быть лучшим вариантом для вас, если вам просто нужно сократить номера.

...