#80 – Use Decimal Type for Monetary Calculations

Since floating point numbers are stored as a binary data, most floating point numbers cannot be stored exactly and suffer from round-off error–the difference between the true mathematical value and the value being stored digitally.

Because of how floating point numbers are stored, even simple base-10 numbers with not much precision cannot be represented exactly.  Consider the example below:

 float f1 = 0.1f;
 float error = (f1 * 1000.0f) - 100.0f;  // Error is 1.49e-6

This demonstrates that we weren’t able to store exactly the value of 0.1, but the value nearest to 0.1 that was representable using the float type.

This inaccuracy leads to errors when we try to store values representing financial transactions and perform simple mathematical operations on the values.  Because of this, you should always use the decimal type for storing financial data:

 decimal f1 = 0.1m;
 decimal error = (f1 * 999999999.0m) - 99999999.9m;  // Error still 0

About Sean
Software developer in the Twin Cities area, passionate about .NET technologies. Equally passionate about my own personal projects related to family history and preservation of family stories and photos.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.

Join 43 other followers