php&数学 - 四舍五入?

时间:2011-08-22 04:49:23

标签: php

基本上,我有一个号码:

<?
$rating = 72.7777777778;
?>

我基本上想做一些数学来创建这个数字为80。

如果数字为62.7777777778,则该数字为60。

我希望数字四舍五入:

20, 40, 60, 80, 100

所以说我有三个数字:

36.999, 47, 91

我会得到:

40, 40, 100

我该怎么做呢?我试过圆形,细胞和放大器地板,但我没有任何地方。

做这样的事情会更容易吗?

if ($rating < 30){
    $rating = 20;
}elseif (($rating > 30) && ($rating < 50)){
    $rating = 40;
}elseif (($rating > 50) && ($rating < 70)){
    $rating = 60;
}elseif (($rating > 70) && ($rating < 90)){
    $rating = 80;
}else{
    $rating = 100;
}

等...

3 个答案:

答案 0 :(得分:10)

$rounded = round(62.222 / 20) * 20;

答案 1 :(得分:3)

试试这个:

 $rating = round($rating/20.0)*20

答案 2 :(得分:3)

如果您希望所有内容始终四舍五入到最接近的<value>,则除以<value>,舍入并乘以<value>

 // replace this with 20 to get 20,40,60,80...
 // or with 7 to get 7, 14, 21, 28, 35...
 // or with...........
 $roundedBy = 10;
 $toRound = 75;
 echo 
    // 7.5 -> 8
    round( $toRound / $roundedBy )
    // 8 * 10 = 80;
    * roundedBy;

如果您要整理,请将round替换为ceil。如果您要向下舍入,请将round替换为floor

不幸的是,您的数字似乎与舍入不一致:36.999, 47将分别舍入到40和50。

关于你的if ... else语句,你可以缩短它们:

if ($rating < 30){
    $rating = 20;
}elseif ($rating < 50){ // will always already be >= 30
    $rating = 40;
}elseif ($rating < 70){ // will always already be >= 70
    $rating = 60;
}elseif ($rating < 90){ // will always already be >= 70
    $rating = 80;
}else{ // will always already be >= 90
    $rating = 100;
}