Search code examples
phproundingfloor

How to convert float to whole number?


I have a number stored in mysql as type float. From what I've read, I should be able to convert a float down by using floor(), but trying this or anything else isn't working. Hoping someone can spot what I'm doing wrong?

Example..

The database shows price as $25.00 - In my php page, I have the following code (after converting the price row to $price):

$price2 = floor($price);
echo $price;
echo '<br>';
echo $price2;

My results are printing:

$25.00
0

I've also tried replacing 'floor' with 'round'. Same result.


Solution

  • That's because you are using $25.00 as an input and the $ makes PHP think that you're trying to round a string -- PHP will round a (non-numeric) string to 0.

    • floor = round down.
    • ceil = round up.
    • round = the same process they taught you in grammar school

    But none of those will work if you have a $ in the string. I suggest that you do something like '$' . round( str_replace( '$', '', $price ) * 100 ) / 100. (The multiplication and division makes it so that it is rounded to the nearest penny (instead of dollar), the str_replace makes it so that it is dealing with a numeric value, then prepend a $. If you're being really fancy, then follow below)

    $dollar = '$' . round( str_replace( '$', '', $price ) * 100 ) / 100;
    // the following makes sure that there are two places to the right of the decimal
    $pieces = explode( '.', $dollar );
    if( isset($pieces[1]) && strlen( $pieces[1] ) == 1 )
    {
        $pieces[1].='0';
        $dollar = implode('.', $pieces);
    }
    // if you like, you can also make it so that if !pieces[1] add the pennies in