Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Accuracy of decimal

Tags:

c#

decimal

I use the decimal type for high precise calculation (monetary).

But I came across this simple division today:

1 / (1 / 37) which should result in 37 again

http://www.wolframalpha.com/input/?i=1%2F+%281%2F37%29

But C# gives me: 37.000000000000000000000000037M

I tried both these: 1m/(1m/37m); and Decimal.Divide(1, Decimal.Divide(1, 37))

but both yield the same results. How is the behaviour explainable?

like image 735
Roger Far Avatar asked Dec 31 '25 01:12

Roger Far


1 Answers

Decimal stores the value as decimal floating point with only limited precision. The result of 1 / 37 is not precicely stored, as it's stored as 0.027027027027027027027027027M. The true number has the group 027 going indefinitely in decimal representation. For that reason, you cannot get the precise numbers in decimal representation for every possible number.

If you use Double in the same calculation, the end result is correct in this case (but it does not mean it will always be better).

A good answer on that topic is here: Difference between decimal, float and double in .NET?

like image 62
Szymon Avatar answered Jan 01 '26 17:01

Szymon



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!