If you are using SQL Server, you have a money type, which converts to a decimal type in .NET.
The decimal digit is a 128-bit base 10 floating-point number, not a binary floating-point number (which is floating / long), which makes it so that in most cases it does not lose accuracy, unlike binary floating-point numbers, which have a loss of accuracy as part of their design.
Here is a good article explaining decimals and floating point logic in general.
source
share