我正在尝试转换板球,例如6
以显示0.6
和12
以显示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 */
我不是说上面的代码是错误的,我只是希望得到最终值。
答案 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;
}