PHP数学转换金额

时间:2014-02-16 11:39:26

标签: php math floor

我正在尝试转换板球,例如6以显示0.612以显示1.6。我把它全部工作了,除了最后一部分,它返回完整的数字。

我的代码:

foreach($numberofballs as $x){
    $first = floor($x / 6);
    $last = $x - ($first * 6);
    echo $first.'.'.$last;
}

让我们分配一个数组进行测试,假设需要为这个循环转换下面的数组

$numberofballs = array(1,2,3,4,5,6);

foreach($numberofballs as $x){
    $first = floor($x / 6);
    $last = $x - ($first * 6);
    echo $first.'.'.$last;
}

/* notes
for 1 it does it right = 0.1
for 2 it does it right = 0.2
for 3 it does it right = 0.3
for 4 it does it right = 0.4
for 5 it does it right = 0.5
how its supposed to work for 6:
for 6 I do not want to get = 1 I would like to get 0.6 and no there is never 0.7
/ end notes */

我不是说上面的代码是错误的,我只是希望得到最终值。

2 个答案:

答案 0 :(得分:2)

尝试这样的事情:

foreach( $numberofballs as $x){


       $first = floor($x / 6);
       $last = $x - ($first * 6);
       if($last==0 && $first>0) {$last=6; $first-=1;}
       echo $first.'.'.$last;
    }

答案 1 :(得分:1)

以下是一种使用base_convert处理问题的有趣方法,但仍将.6作为第10位处理,而不是在.5之后滚动:

$numberofballs = range(1,24);

foreach( $numberofballs as $x){

    $round = ceil($x/6) - 1;
    echo  base_convert($x + $round, 10, 7)/10;

}

通过使用基数7,您保留.6,但显然第二组将减少1,第三组则减少2,等等。但是如果我们根据当前球计算轮次(使用第一轮为0,第二轮为1,等等,并将其添加到基本转换前的当前球数,它将始终正确调整,仍然以.1到.6作为符号。

这避免了对6,12,18等的调整的条件的需要,因为无论正在计算哪个球,圆形计算都会对其进行调整。它也可以转换为一个简单的函数,将任何数字转换为正确的符号,而无需跟踪前一个数字:

function bowls2overs($ball_number) {

    $round = ceil($ball_number/6) - 1;
    return base_convert($ball_number + $round, 10, 7)/10;

}