我有一个以mysql类型存储在mysql中的数字。从我读过的内容来看,我应该可以通过使用floor()来转换浮点数,但尝试这个或其他任何东西都不起作用。希望有人能发现我做错了什么?
示例..
数据库显示价格为25.00美元 - 在我的php页面中,我有以下代码(将价格行转换为$ price后):
$price2 = floor($price);
echo $price;
echo '<br>';
echo $price2;
我的结果是打印:
$25.00
0
我也试过用'round'代替'floor'。结果相同。
答案 0 :(得分: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
答案 1 :(得分:0)
正如cwallenpoole所说,你无法舍入非数字值。但是,你可以改为数字,例如
$price = '$25.25';
echo sprintf('$%0.2f', floor(preg_replace('/[^\d\.]/', null, $price)));