Using number_format method in Laravel

I am fairly new in Laravel and Blade templating.
Can anyone help show me how to do this?

I have a view like this:

@foreach ($Expenses as $Expense)
    <tr>
        <td>{{{ $Expense->type }}}</td>
        <td>{{{ $Expense->narration }}}</td>
        <td>{{{ $Expense->price }}}</td>
        <td>{{{ $Expense->quantity }}}</td>
        <td>{{{ $Expense->amount }}}</td>                                                            
    </tr>
@endforeach

I want the $Expense->price and$Expense->amount to be formatted.
I tried using it on the $Expense->amount as number_format($Expense->amount) but it didn't work.

Upvotes: 46

Views: 180794

Answers (5)

Hedayatullah Sarwary
Hedayatullah Sarwary

Reputation: 2834

This works, use this code:

Example:

$number = 1234.56;
$format_number = number_format($number);

See the link for more information about number_format(): https://www.php.net/manual/en/function.number-format.php

Upvotes: 1

8ctopus
8ctopus

Reputation: 3237

Here's another way of doing it, add in app\Providers\AppServiceProvider.php

use Illuminate\Support\Str;

...

public function boot()
{
    // add Str::currency macro
    Str::macro('currency', function ($price)
    {
        return number_format($price, 2, '.', '\'');
    });
}

Then use Str::currency() in the blade templates or directly in the Expense model.

@foreach ($Expenses as $Expense)
    <tr>
        <td>{{{ $Expense->type }}}</td>
        <td>{{{ $Expense->narration }}}</td>
        <td>{{{ Str::currency($Expense->price) }}}</td>
        <td>{{{ $Expense->quantity }}}</td>
        <td>{{{ Str::currency($Expense->amount) }}}</td>                                                            
    </tr>
@endforeach

Upvotes: 4

Joaqu&#237;n Marcher
Joaqu&#237;n Marcher

Reputation: 336

If you are using Eloquent the best solution is:

public function getFormattedPriceAttribute()
{
    return number_format($this->attributes['price'], 2);
}

So now you must append formattedPrice in your model and you can use both, price (at its original state) and formattedPrice.

Upvotes: 14

Jonathan Borges
Jonathan Borges

Reputation: 1069

If you are using Eloquent, in your model put:

public function getPriceAttribute($price)
{
    return $this->attributes['price'] = sprintf('U$ %s', number_format($price, 2));
}

Where getPriceAttribute is your field on database. getSomethingAttribute.

Upvotes: 15

teeyo
teeyo

Reputation: 3755

This should work :

<td>{{ number_format($Expense->price, 2) }}</td>

Upvotes: 131

Related Questions