I encountered this issue in a Rails app where I had my local development DB set as PostgreSQL and my staging set as MySQL. A big no-no, I should have known better.
On my staging environment, when I was saving a number such as 99.99 into the decimal field the result was 99. I was losing the fractional part!
Essentially, if you create a field of type decimal without specifying a scale (the amount of allowed digits on the right of the decimal point), you’ll get different results depending on your database.
MySQL will just assume a scale of 0 and therefore ditch everything after the decimal.
PostgreSQL will just let you have up to its max scale (16383 digits after the decimal)
This obviously makes a massive difference when dealing with money!