- Home /
Unity/C# ignores decimal after it reach some value
Hello, I got a little problem. I am creating a clicker game and when the money ammount reaches over 100 000, the 2nd decimal digit stops moving, then when it reaches 1 000 000 the 1st decimal digits stops moving also. My code looks like that:
float currentMoney = 0.00f;
private void Update()
{
currentMoney += 11111.11f;
}
For example:
1st frame - currentMoney = 99 999.55
2nd frame - currentMoney = 100 000.50
3rd frame - currentMoney = 100 111.60
X frame - currentMoney = 999 999 .30
X+1 frame - currentMoney = 1 000 011 .00
Answer by Eno-Khaon · Aug 31, 2021 at 04:17 AM
That's how Floating Point numbers work.
That said, the main subject of this question, Floating Point Accuracy, comes up fairly frequently. This isn't an uncommon subject, but the context in which it is brought up will vary. So, I'll keep it brief.
Unity uses 32-bit ( float) and 64-bit ( double) Floating Point values, with an emphasis on 32-bit.
Unlike integers, however, the data in Floating Point numbers needs to be divided up a bit.
A float is comprised of a 23-bit number, an 8-bit mantissa (exponent), and 1-bit for the positive/negative sign. Essentially, you can think of it as a 23-bit integer where you can place the decimal point wherever you want around it.
// 1234567.0
// 123456.7
// 12345.67
// 1234.567
// 0.000001234567
// 12345670000000.0
// etc.
Because it only uses 23-bits for the main value, however, it doesn't have a *huge* amount of accuracy available to it. This is the problem you're running into. Basically, as you increase the exponent (power of 10) of your value, you lose a digit of accuracy off the other end.
Having said all this, I'll also direct you to a pair of posts I previously made related to the subject of games using huge number libraries (or similar). Hopefully, those might help point you in your preferred direction.
Edit: Formatting
Your answer
Follow this Question
Related Questions
Rotation Values Garbled When Set By Code 2 Answers
Unity changing decimal points to decimal commas? 1 Answer
I dont want Decimals :P 1 Answer
How to fix wobbling float when away from spawn? 1 Answer
Javascript rounding off a decimal 0 Answers