Ryan Jones Blog – dotCULT.com Ryan Jones Blogs About Internet Culture, Marketing, SEO, & Social Media

February 20, 2007

Sometimes 7 and 8 are equal.

Filed under: Main — Ryan Jones @ 7:19 pm

Back in college I had a professor who would dock off points every time he saw the word float in our code. He never really told us why, but from then on we all started using double any time we needed a decimal.

It’s been a few years since college, but I think I’m finally closer to understanding what he meant. Take a look at the following PHP code. What do you think it does?


echo (int) ((.1 + .7) * 10);

It’s a basic PHP math operation. It should add .1 and .7 to get .8, then multiply that by 10 to yield 8 right?

Not so fast, what’s that (int) doing?

For those of you unfamiliar with PHP, it’s a dynamicaly typed language. That means unlike c++, you don’t have to declare a type when you declare a variable. PHP will look at how you’re using it and decide what you meant.

The (int) is a cast. It tells PHP to take whatever that result is and make sure it’s an integer. It’s very seldom used, but there are a few examples I can think of where it’s a good idea to cast your variables. I’ll save that for a later column though.

Anyway, run the above code. What happens? Do you see 8? No! It outputs 7!!

Take the (int) cast away though, and you’ll see your expected result.

So what’s going on here? The simple answer is that it has something to do with the way PHP handles floating point numbers. The long answer is, it’s the reason why the data from one of my applications never added up correctly.

No Comments

No comments yet.

RSS feed for comments on this post.

Sorry, the comment form is closed at this time.

Powered by WordPress