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开发者_StackOverflow中文版);
echo $price;
echo '<br>';
echo $price2;
My results are printing:
$25.00
0
I've also tried replacing 'floor' with 'round'. Same result.
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
As cwallenpoole says, you can't round a non-numeric value. However, you can make it numeric instead, e.g.
$price = '$25.25';
echo sprintf('$%0.2f', floor(preg_replace('/[^\d\.]/', null, $price)));
精彩评论