2014-02-16 3 views
4

크리켓 오버 (6)를 0.612에 표시하려면 1.6으로 표시하려고합니다. 전체 그림을 반환하는 마지막 부분을 제외하고는 모든 작업이 완료되었습니다.PHP 수학 변환 금액

내 코드 :

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

[base_convert 함수] (http : // www. php.net/base_convert)? base_convert ($ points/10, 10, 6) 또는 간단한 계수 연산 : $ result = ($ points % 6)/10; – Tularis

+0

그것은 올바른 결과를주지 못합니다. 몇 가지 방법을 시도해 보았습니다. 위의 해결 방법은이 목적에 가장 적합하지만 최종 결과는 원하는 결과가 아닙니다. – Genus

+1

@ Tularis - x.0으로 롤오버하는 대신 x.6을 10으로 사용하여 표기법을 조정하지 마십시오. 대체 솔루션으로 아이디어를 수정했습니다. – Anthony

답변

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; 
    } 
+3

if ($ last == 0)이며 괜찮습니다. :) – sinisake

+1

@nevermind 요 선생님! 수정 됨. – DhruvJoshi

+0

위의 솔루션은 원하는대로 작동합니다. @DhruvJoshi 감사합니다!, 우리는 그것을 아름답게 만듭니다! 그리고 너를 잊지 마라. – Genus

1

base_convert를 사용하지만 여전히 10 위로 .6을 처리하는 대신 .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 등) a 그것을베이스 변환 전에 현재의 볼 카운트에 더하면 항상 올바르게 조정되고 .1에서 .6까지 표기법으로 조정됩니다.

이렇게하면 계산중인 볼에 관계없이 라운드 계산이 조정되므로 6, 12, 18 등의 조건부 조정이 필요 없습니다. 이전 번호를 추적 할 필요없이 숫자를 올바른 표기법으로 변환하는 간단한 함수로 변환 할 수도 있습니다.

function bowls2overs($ball_number) { 

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

} 
+0

귀하의 방법도 작동 할 수 있지만 아직 시도하지 않았습니다. 그것의보기에서 일하고있는 그것의보기. 감사. – Genus