Here’s the basics.
For starters. A ‘float’ in memory takes up a finite amount of space. There are no “infinite repeating” values in memory as that would imply infinite amount of RAM. Rather instead a 32-bit single floating point value fits inside 32-bits of memory.
Next, floats are stored in scientific notation. The 32-bits are broken up as sign, exponent, and mantissa (mantissa is the fractional part of the scientific notation where the significant values are). They’re stored like so:

So with this information there is the first form of float error that most people run into. Floats are stored in binary, not decimal. And the thing is that numbers that you think are normal in decimal are actually repeating numbers in binary. You know how in decimal 1/3 is 0.3333333333…, well in binary the simple value of 1/10 is a repeating number of 0.00011001100110011… repeating on into infinity. But since there is only a finite amount of space, it gets trimmed off. So 0.1 is stored as 0.0999 (approximately). And MANY other numbers have this problem. Like 0.6 in your case. I mean think about it… 1/10, 3/5, these fractions are made up of values not easily factorable by powers of 2 which binary is.
The other form of float error is sig value range. Single floats only really store ~7 decimal digits of sig value (give or take depending the number since it’s actually 24 digits of binary sig value which can vary in decimal). As a result changes in a float that are smaller than the current sig value range won’t register.
Say you have the number:
745,672,190,000
And you try to add 1
You will result in:
745,672,190,000
Why? Because the sig value of the larger number is out of range of 1. When added you get 745,672,190,001… but we have to truncate it down to ~7 digits of sig values. And you always take the largest sig values resulting in 745,672,190,000.
Also these 2 things come into play together. If you have 15.6 + 0.01. Well we already know that .6 is a repeating number, and 0.01 is a repeating number. But there also out of sig range of one another. Even though 0.01 is stored as ~0.0099998, we’re going to lose some of that when we sume it to the 15.6 since so much sig value is store in that 15 of the 15.6. Our result definitely won’t be 15.61, but it will be even off from if we had just set a variable to 15.6 rather than summed our way there.
…
You are currently running into the binary/decimal conversion error of floats. And there’s NOTHING you can do about it. Just like you accept that 0.33333 is close enough to 1/3. You need to just accept that 0.59999 is close enough to 0.6 for your maths. You’re not performing rocket science here, it’s just a video game, and that tiny difference isn’t going to kill anyone.
Just know that because this float error exists you should NEVER do float comparisons. Never check if some float x == some float y. Because even if they’re reeeeaaaaalllly close, they’re not exactly the same. You seldom should ever need to do a float comparison, but if you find yourself needing too, use Mathf.Approximately. But usually there’s another way around it. I never really find myself needing to check if a value IS some other value… rather instead I usually find myself needing to check if a value is larger than or less than another value.