# Converting a PHP string number into a numeric value

Despite seeming like a very basic procedure, this evening I found I had wasted half an hour, split between Googling for the answer and trying to work it out for myself.

I have a number that needs to be stored in a string format in PHP. However, I need to use this value at some point to run a calculation, for which I need the true value as opposed to the string. If I had just wanted a whole number the answer is very simple, use the PHP (int) method to convert it.

It is not that easy when you are working with decimals. Unless I am missing something (in which case feel free to embarass me in the comments below!) there is no easy way to do this. Here is what I came up with:

```\$string = "3.142";        // The source number, as a string
\$a = explode(".",\$string);            // Split the string, using the decimal point as separator
\$int = \$a[0];                        // The section before the decimal point
\$dec = \$a[1];                        // The section after the decimal point
\$lengthofnum=strlen(\$dec);            // Get the num of characters after the decimal point
\$divider="1";                        // This sets the divider at 1
\$i=0;
while(\$i < (\$lengthofnum)) {
\$divider.="0";                    // Adds a zero to the divider for every char after the decimal point
\$i++;
}
\$divider=(int)\$divider;                // Converts the divider (currently a string) to an integer
\$total=\$int+(\$dec/\$divider);        // compiles the total back as a numeric value```

If anyone knows of a quicker / cleaner / better / more funky way of doing this simple task please do let me know… if not then I hope this little snippet at least lets you avoid losing the half our of your life that I lost this evening!

UPDATE: Thanks to Xobman, who Twittered me this little gem:

Try \$foo = “3.123”; \$bar = (float) \$foo;

LOL… low and behold, it works! That’ll teach me to post my (oh so clever!) code on the Interweb for all to see 😀

Thanks Xobman!

Tags:
21 replies
1. Rarst says:

If you feel like inventing function that should be native – you usually are. 🙂

2. Lyndi says:

Any hour spent coding cannot be a waste, you always learn something from the experience. At least now we know that Twitter can indeed be very handy.

3. Jim says:

@Rarst + Lyndi: You’re right, these things are often a lot easier than they first seem. Also, Twitter does seem a great way of asking these questions. Just a shame in my case I asked the question AFTER I had spent the time 😀

4. Stan says:

It’s still not so easy if the string cotains thousands separators or other such nonsense. For example, “\$12,500.05”.

What I do is split at the decimal point as noted above ie: explode(‘.’,\$string).

Next, I use count() to make sure that my array has no more than two entries, otherwise I error out because if there is more than 1 decimal point, there’s obviously big problems with the string.

Then I use ereg_replace(“[^[:digit:]]”,””,\$arr[x]) to strip out all non-numeric characters from both array entries.

Finally I put it all back together and create a float, \$number = (float) “\$arr[0].\$arr[1]”

5. Peter says:

Great solution Stan! With that approach it is pretty easy to deal with any thousand separator, either commas or spaces of whatever else.

6. Raul says:

thanx Stan” would you put the code? i cant figure out how to do it yet.

7. Steve M says:

Thanks so much! That little float thing worked a treat! 🙂

8. Zach M says:

I need to go the other way around. I have a phone number I need to convert to a number. Like this: 555-555-5555 to 5555555555. How do I get rid of the dashes?

9. Jay Ruiz says:

Use str_replace.

I need to go the other way around. I have a phone number I need to convert to a number. Like this: 555-555-5555 to 5555555555. How do I get rid of the dashes?

10. Zach M says:

Thanks for the response Jay. That’s what I did, and it works flawlessly.

11. DH says:

Thanks for your work! I was in the same boat but, thanks to you, my Googling paid off immediately!

12. linuxaomi says:

555-555-5555 to 5555555555:

\$y = ‘555-555-5555’;
\$x = str_replace(‘-‘, ”, \$y);

13. kiki says:

I have a string \$a = ‘AT0001’
and I need it become ‘AT0002’ in the next entry automatically and become ‘AT0003’ , ‘AT0025’ and so on..
please could someone help me how to do it?

14. kalu says:

i have int to convert into string.

15. Harsha says:

“2*5+10*2+2*4”

16. webmaster3 says:

\$val = 2*5+10*2+2*4;
the * / are accomplished first
then the + –
your operator is correct but you CANNOT USE QUOTES

17. Fab says:

Am I missing something or this just works fine:

echo gettype( (“12.123” + 0) );
=> double

echo gettype( (“12” + 0) );
=> integer

?

18. J Del says:

You could try:
\$array = array(\$string);
\$numerical = \$array[0]
// \$string is now a number –
\$numerical. Works for me!