开发者

How to convert float to whole number? [duplicate]

This question already has answers here: Getting rid of the dollar sign? (4 answers) Closed 12 months ago.

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)));
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜