Strange problem comparing floats in objective-C
casting, floating-point, iphone, objective-c
Solution
I believe, having not found the standard that says so, that when comparing a `float` to a `double` the `float` is cast to a `double` before comparing. Floating point numbers without a modifier are considered to be `double` in C.
However, in C there is no exact representation of 0.1 in floats and doubles. Now, using a float gives you a small error. Using a double gives you an even smaller error. The problem now is, that by casting the `float` to a `double` you carry over the bigger of error of the `float`. Of course they aren't gone compare equal now.
Instead of using `(float)0.1` you could use `0.1f` which is a bit nicer to read.
Problem
At some point in an algorithm I need to compare the float value of a property of a class to a float. So I do this: ``` if (self.scroller.currentValue <= 0.1) { } ``` where currentValue is a float property. However, when I have equality and `self.scroller.currentValue = 0.1` the if statement is not fulfilled and the code not executed! I found out that I can fix this by casting 0.1 to float. Like this: ``` if (self.scroller.currentValue <= (float)0.1) { } ``` This works fine. Can anyone explain to my why this is happening? Is 0.1 defined as a double by default or something? Thanks.