# #Working with Money

If you have worked with money(currency) closely enough, you will know that it is not as easy as it seems. If you have not worked with money a lot, Your first impression might be it is nothing more than mathematics.

In this tutorial, we will show you some pitfalls when working with money. Meanwhile we will introduce a great package that makes money easy to work with.

## #Money is not just a number

You can not take 100 Singapore dollar and exchange for 100 US dollar. Money is not just a number. It is consist of a numeric value and a currency.

You should never write your code as below to represent money again:

\$price = 100;

Variable \$price is meaningless in the context of money.

Let's install the Money package to help us create a meaningful money object:

composer require moneyphp/money

Now we create a price in Singapore dollar:

\$price = new Money(100, new Currency('SGD'));

When working with money, you should always work the lowest unit, which is in cent. This saves you the hassle of dealing with float dividing issues.

So keep in mind when instantiating a Money object, you are passing in cents.

\$price = new Money(100, new Currency('SGD'));

The \$price above represents 1 Singapore dollar.

## #Different currency has different decimal place

Decimal place is not always two for money, so you can not simply use number_format() to format money.

For example, for Japanese Yen, there is no decimal value whereas standard Singapore Dollar has two decimal places. The Money package provides a decimal parser allows us to parse money to a correct decimal format:

\$price = new Money(500, new Currency('JPY'));

\$currencies = new ISOCurrencies();

\$moneyFormatter = new DecimalMoneyFormatter(\$currencies);

echo \$moneyFormatter->format(\$price);