jsbn-based arbitrary precision operations on currency amounts "XXX.YY"; because floats are BAD for representing money

Adds, multiplies the currency *amounts,* and calculates percentages of *amounts.* The result of
each of those operations is also an *amount:* a string, strictly matching the `/^\-?\d+\.\d\d$/`

pattern, like "0.25", "1000.00", or "-42.10".

*Amounts* on input and output are arbitrary large and precise:

```
99999999999999999999999999999999999999999999999999999999999999999999999999999999.99
+
0.01
=
100000000000000000000000000000000000000000000000000000000000000000000000000000000.00
```

However, in cases when the division is involved — like for percentage calculation — the result is rounded to the whole cent.

moneypercent"0.50" "33.00" // is "0.17" instead of "0.165"

As a bonus feature, there's a simple formatting function for *amounts* in the following currencies:

- CHF
- EUR
- GBP
- JPY
- LTL
- PLN
- SEK
- SKK
- UAH
- USD

moneyformat"EUR" "-1560.00" // "-1.560,00"

Because storing currency amounts in floats is a really bad idea

Works both on Node and in the browser.

```
$ npm install --save money-math
```

var money = require"money-math";

Download money.js

var money = require"money-math";

Download jsbn/index.js

Download money.js

windowMoney

moneyadd"16.11" "17.07"; // "33.18" moneysubtract"16.00" "7.00"; // "9.00" moneymul"24.00" "0.25"; // "6.00" moneydiv"64.00" "2.00"; // "32.00" moneypercent"200.00" "3.25"; // "6.50" moneycmp"100.00" "200.00"; // -1 moneyformat"JPY" "236800.00"; // "236,800" moneyfloatToAmount56.345; // "56.35"

And last, but not least :)

moneyroundUpTo5Cents"42.02"; // "42.05" moneyroundTo5Cents"442.26"; // "442.25"

Which we use for bills in CHF that are required by law to be 0 (mod 5).

The *amount* strings are expected to strictly adhere to the format described by the regular
expression noted above. Thus, for example, it must be:

`"10.10"`

, not`"10.1"`

, not`"10.100"`

;`"10.00"`

, not`10`

, not`"10"`

, not`"10.0"`

.

That's a precondition for any of the API functions accepting *amount* arguments to work correctly. I
understand that it may be confusing to some of new users; but I believe that's an optimally
pragmatic way to mimic, by convention, an algebraic data type in idiomatic JavaScript -- a (very)
dynamically typed language.

Luckily, you can always move your arbitrary float value into the *amounts field* with
`money.floatToAmount(...)`

. Once all the values are *amounts,* money-math guarantees that all the
*field* operations keep the results withing the *field.* Classic algebra.

A thoughtful reader may ask, why have `money.floatToAmount()`

, when there's the
`Number.prototype.toFixed(2)`

? Well, because:

> 56.155toFixed2;'56.16'> 56.345toFixed2;'56.34'

Floats are such floats...