4

我正在尝试转换板球比赛,即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 */

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

4

2 回答 2

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;
    }
于 2014-02-16T11:47:45.377 回答
1

这是一种处理问题的有趣方法,使用base_convert但仍处理.6为第十位而不是在 0.5 之后翻转:

$numberofballs = range(1,24);

foreach( $numberofballs as $x){

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

}

通过使用基数 7,您保留了 0.6,但显然第二组将偏移 1,第三组偏移 2,依此类推。但是如果我们根据当前球计算回合(第一回合为0,第二个 1 等)并将其添加到基础转换之前的当前球数,它将始终正确调整,仍然是 0.1 到 0.6 作为符号。

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

function bowls2overs($ball_number) {

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

}
于 2014-02-16T12:43:22.093 回答