Converting a PHP string number into a numeric value

Technical Info Add comments

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 :D

Thanks Xobman!

Stumble it!

20 Responses to “Converting a PHP string number into a numeric value”

  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 :D

  4. Funmarkaz Says:

    You can use intval()

  5. 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]“

  6. 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.

  7. Null Says:

    Thanks a lot, Stan!

  8. josh Says:

    http://www.php.net/manual/en/function.floatval.php

    Did you try floatval() ?

  9. Raul Says:

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

  10. Steve M Says:

    Thanks so much! That little float thing worked a treat! :)

  11. 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?

  12. 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?

  13. Zach M Says:

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

  14. DH Says:

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

  15. linuxaomi Says:

    555-555-5555 to 5555555555:

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

  16. 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?

  17. kalu Says:

    i have int to convert into string.

  18. Harsha Says:

    Please help me to convert the following string to give me the result 38.

    “2*5+10*2+2*4″

  19. webmaster3 Says:

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

  20. Fab Says:

    Am I missing something or this just works fine:

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

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

    ?

Leave a Reply