1

我有一个数字作为浮点类型存储在 mysql 中。根据我的阅读,我应该能够使用 floor() 将浮点数向下转换,但是尝试这个或其他任何方法都不起作用。希望有人能发现我做错了什么?

例子..

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

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

我的结果正在打印:

$25.00
0

我也试过用“圆形”代替“地板”。结果相同。

4

2 回答 2

6

那是因为您将$25.00其用作输入并且$使 PHP 认为您正在尝试对字符串进行四舍五入——PHP 会将(非数字)字符串四舍五入为 0。

  • floor= 向下舍入。
  • ceil=四舍五入。
  • round= 他们在文法学校教给你的过程相同

$但是如果字符串中有 a ,这些都不起作用。我建议你做类似的事情'$' . round( str_replace( '$', '', $price ) * 100 ) / 100。(乘法和除法使它四舍五入到最接近的一美分(而不是美元),str_replace使它处理一个数值,然后在前面加上 a $。如果你真的很花哨,然后按照下面)

$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
于 2011-09-06T01:49:57.583 回答
0

正如 cwallenpoole 所说,您不能对非数字值进行四舍五入。但是,您可以将其设为数字​​,例如

$price = '$25.25';
echo sprintf('$%0.2f', floor(preg_replace('/[^\d\.]/', null, $price)));
于 2011-09-06T01:53:05.190 回答