Monetary value in integer over decimal datatype
The reasoning that it does not store actual value and will cause some rounding difference/errors


This is only an issue if you are storing decimals as floating point decimals. A float should always be considered to be an estimate which is subject to rounding errors and variability. 

In most RDBMSs, using a decimal () data type is not a floating point decimal, and is not subject to the same variability. 

When performing math &amp; other computation, you will need to be conscious of rounding or truncation to ensure stored values meet accepted practices-- but you'll need to do that regardless of whether storing as an int or a decimal.

For example, take the following example on SQL Server (You didn't specify an RDBMS, but I'm most familiar with SQL Server). This is a simple example that mimics a calculation like "increase by 6.5%":

DECLARE @intmoney int;
DECLARE @decmoney decimal(19, 4);

SET @intmoney = 1234500  * 1.065;
SET @decmoney = 123.4500 * 1.065;

SELECT IntegerMoney = @intmoney, 
       DecimalMoney = @decmoney;


The integer money value will be rounded to 1314742.
The decimal money value will be rounded to 131.4743.

Doing the math "by hand" will give a value of 131.47425. 
* The integer value has been truncated. 
* The decimal value has been rounded .

This is expected behavior based on the different data types. Depending on your application's rounding rules, one of these behaviors may be more or less desired. If you are storing important financial information, you may want to explicitly specify rounding using the ROUND, CEILING, and FLOOR functions (or equivalent, depending on platform &amp; language). This can ensure you always have the expected behavior and do not suffer from unexpected rounding/truncating issues.