[Question] What is the Main Difference of Float, Double and Decimal Types in C#?
|Answer
The main difference of Float, Double and Decimal is precision. Decimals have a high degree of accuracy.
Unlike decimals, floats/doubles types have special values. The float and double have constants for NaN, +∞, and −∞, as well as other values (MaxValue, MinValue, and Epsilon).
Another significant difference is that float/double internally represent numbers in base 2, but decimal base 10.
Of course they have different sizes as well:
- Float size is 32 bit (7 digits)
- Double size is 64 bit (15-16 digits)
- Decimal size is 128 bit (28-29 digits)
Details
Decimal numbers have much higher precision and are usually used within financial applications that require a high degree of accuracy. Decimals are much slower (20X times in some tests) than a double/float numbers.
Double is useful for scientific computations (such as computing spatial coordinates). Decimal is useful for financial computations and values that are “human-made” rather than the result of real-world measurements.
Decimals and floats/doubles cannot be compared without a cast whereas Floats and Doubles can. Decimals also allow the encoding or trailing zeros.
[adinserter block=”6″]
Examples
Code
Console.WriteLine ( 1.0 / 0.0); // Infinity Console.WriteLine (−1.0 / 0.0); // -Infinity Console.WriteLine ( 1.0 / −0.0); // -Infinity Console.WriteLine (−1.0 / −0.0); // Infinity Console.WriteLine ( 0.0 / 0.0); // NaN Console.WriteLine ((1.0 / 0.0) − (1.0 / 0.0)); // NaN Console.WriteLine (0.0 / 0.0 == double.NaN); // False Console.WriteLine (double.IsNaN (0.0 / 0.0)); // True Console.WriteLine (object.Equals (0.0 / 0.0, double.NaN)); // True
Code
float f = 1F / 9; double d = 1D / 9; decimal dc = 1M / 9; Console.WriteLine("Float number example: {0}\nDouble number example: {1}\nDecimal number example: {2}", f, d, dc);
Result
Float number example: 0.11111111 Double number example: 0.1111111111111111 Decimal number example: 0.1111111111111111111111111111
Useful information
Decimal type exist only in c#
Test Environment
- Windows 11
- Visual Studio 2022
- Visual Studio 2022
- C# 9
- .NET 5