What data type should I use to represent money in C#?

c#

Solution

Use `System.Decimal`:

The Decimal value type represents decimal numbers ranging from positive 79,228,162,514,264,337,593,543,950,335 to negative 79,228,162,514,264,337,593,543,950,335. The Decimal value type is appropriate for financial calculations requiring large numbers of significant integral and fractional digits and no round-off errors. The Decimal type does not eliminate the need for rounding. Rather, it minimizes errors due to rounding.

Neither `System.Single` (`float`) nor `System.Double` (`double`) are precise enough capable of representing high-precision floating point numbers without rounding errors.

Problem

In C#, what data type should I use to represent monetary amounts? Decimal? Float? Double? I want to take in consideration: precision, rounding, etc.

Original source