Php 如何将浮点数转换为整数?

Php 如何将浮点数转换为整数?,php,rounding,floor,Php,Rounding,Floor,我在mysql中存储了一个float类型的数字。从我所读到的内容来看,我应该能够使用floor()转换一个float-down,但是尝试这个或任何其他方法都不起作用。希望有人能发现我做错了什么 例如 数据库显示价格为$25.00-在我的php页面中,我有以下代码(将价格行转换为$price后): 我也试着用“圆”代替“地板”。同样的结果 这是因为您使用$25.00作为输入,$使PHP认为您正在尝试将字符串四舍五入--PHP将(非数字)字符串四舍五入为0 floor=向下取整 ceil=汇总 r

我在mysql中存储了一个float类型的数字。从我所读到的内容来看,我应该能够使用floor()转换一个float-down,但是尝试这个或任何其他方法都不起作用。希望有人能发现我做错了什么

例如

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


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

这是因为您使用
$25.00
作为输入,
$
使PHP认为您正在尝试将字符串四舍五入--PHP将(非数字)字符串四舍五入为0

  • floor
    =向下取整
  • ceil
    =汇总
  • round
    =他们在文法学校教你的相同过程
但是如果字符串中有一个
$
,这些都不起作用。我建议您执行类似于
“$”的操作。圆形(str_替换(“$”,“$”价格)*100)/100
。(乘法和除法使其四舍五入到最接近的便士(而不是美元),
str_replace
使其处理一个数值,然后在前面加上一个
$
。如果您真的很喜欢,请按照下面的说明操作)


这是因为您正在使用
$25.00
作为输入,
$
使PHP认为您正在尝试将字符串四舍五入--PHP将(非数字)字符串四舍五入为0

  • floor
    =向下取整
  • ceil
    =汇总
  • round
    =他们在文法学校教你的相同过程
但是如果字符串中有一个
$
,这些都不起作用。我建议您执行类似于
“$”的操作。圆形(str_替换(“$”,“$”价格)*100)/100
。(乘法和除法使其四舍五入到最接近的便士(而不是美元),
str_replace
使其处理一个数值,然后在前面加上一个
$
。如果您真的很喜欢,请按照下面的说明操作)


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

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

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

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

你期待什么?您正在铺设
“$”
。您期望得到什么?您正在执行
'$'
。呃,更正确的说法是,当将字符串强制为数字时,前导的
$
将导致转换返回0。只要字符串可以转换成数字,就可以将字符串四舍五入。谢谢!为这个愚蠢的错误感到抱歉。很好的解释!我应该说明db将值显示为25.00(不是$25.00),因此我没有意识到在上面的代码中添加了$符号。更正确的说法是,当将字符串强制为数字时,前导的
$
将导致转换返回0。只要字符串可以转换成数字,就可以将字符串四舍五入。谢谢!为这个愚蠢的错误感到抱歉。很好的解释!我应该说明db显示的值是25.00(不是$25.00),所以我没有意识到在上面的代码中添加了$sign
$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
$price = '$25.25';
echo sprintf('$%0.2f', floor(preg_replace('/[^\d\.]/', null, $price)));