2011-09-06 156 views
1

我有一个数字存储在mysql中,类型为float。从我读过的,我应该能够通过使用floor()来转换float,但尝试这个或其他任何操作都不起作用。希望有人能够发现我做错了什么?如何将浮点数转换为整数?

例..

的数据库显示的价格为$ 25.00 - 在我的PHP页面,我有以下代码(价格行转换为$价格后):

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

我的结果是印刷:

$25.00 
0 

我也试着用'圆'代替'地板'。同样的结果。

+2

你期待什么?你的地板是''''。 –

回答

6

那是因为你正在使用$25.00作为输入和$使得PHP认为你想圆一个字符串 - PHP将圆一个(非数字)串0

  • floor =向下。
  • ceil =取整。
  • round =他们教你文法学校

但如果你有字符串中$无那些将工作同样的过程。我建议你做一些类似'$' . round(str_replace('$', '', $price) * 100)/100的事情。 (乘法和除法使它四舍五入到最接近的一分钱(而不是美元),str_replace使它处理一个数字值,然后加上$。如果你真的很喜欢,那么按照下面)

$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 
+0

打我几秒钟。 – canadiancreed

+2

呃,当把一个字符串强制转换为一个数字时,前面的'$'会导致转换返回0,这样会更准确。只要字符串可以转换为数。 – cdhowie

+0

谢谢!对不起,这个愚蠢的错误。很好的解释!我应该说,数据库显示的价值为25.00(不是25.00美元),所以我没有意识到在这个代码上面加上$符号 – Andi

0

正如cwallenpoole所说,你不能舍入一个非数字值。但是,你可以用数字来代替,例如

$price = '$25.25'; 
echo sprintf('$%0.2f', floor(preg_replace('/[^\d\.]/', null, $price)));