2012-03-17 4 views
3

나는 선수가 맹세하는 빈도의 통계를 유지하기 위해 노력하고있어 (말한다 "나쁜 단어를"- 우리가 러시아어에 그들 중 많은합니까) 다음 PostgreSQL의 테이블 :PHP의 정수 부분은 0을 생성합니다 - 어떻게 형변환 할 것인가? <a href="http://preferans.de" rel="nofollow noreferrer">a Russian card game</a>에서

# select * from pref_chat order by swear desc; 
      id   | swear | lines 
-------------------------+-------+------- 
OK194281930260   |  3 | 153 
OK350321778615   |  2 | 127 
DE12770     |  2 | 339 
OK122898831181   |  2 | 63 
OK349829847011   |  2 | 126 
OK215240745969   |  1 | 66 
OK459742722980   |  1 | 96 

을 그리고 나는이 데이터의 정수를 생성해야 - 1과 100 사이 (범람하는 것은 괜찮습니다) - 나는 다음과 같은 " swear'o'meter 만들 수 있도록 : 그래서

enter image description here

을 난 노력 (PHP 5.3 CentOS 6.2) :

$sth = $db->prepare('select swear, lines from pref_chat where id=?'); 
    $sth->execute(array($id)); 
    if ($row = $sth->fetch(PDO::FETCH_ASSOC)) { 
      $quotient = 100 * floor(20 * $row['swear']/(1 + $row['lines'])); 
      print('<p><img src="https://chart.googleapis.com/chart?chs=700x100&cht=gom&chco=00FF00,FFFF00,FF0000&chxt=x&chxl=0:|Swearometer&chd=t:' . $quotient . '" width=700 height=100 alt="Swearometer"></p>)'; 
    } 

불행히도 저는 PHP가 "정수 구분"을하고 있기 때문에 불행히도 제로가됩니다.

나는()$ 행 [ '맹세']$ 행 [ '라인']에 "캐스팅"그들이 떠하는 바닥을 씁니다 시도했다 -하지만이 도움이되지 않았다.

UPDATE

:

미안 해요, 난 내 원래의 질문에 오타가 있었다 ...는 $ 지수 정말 0, 나는 그것을 밖으로 인쇄 할 수 있습니다. 또한 여전히 제로 다음을 시도했지만했습니다

$quot = 100 * floor(20 * $row['swear']/(.1 + $row['lines'])); 
+1

+1 스왈 로스 측정기 ... – biziclop

+0

계산을 PHP 측에서 데이터베이스로 옮기는 것이 좋습니다. 그들은 데이터 처리를위한 매우 강력한 도구이며 이것이 완벽한 예입니다. – jmkeyes

답변

1

음, $row['swear']/(1 + $row['lines'])는 항상 당신이 목록 번호 부여 < .05이 될 것입니다. 따라서 20을 곱한 다음 floor을 입력하면 0을 올바르게 얻게됩니다.

+0

아니요, 내 질문 텍스트의 오타입니다. 죄송합니다. 지금 업데이트했습니다. $ quotient는 0입니다. 인쇄했습니다. –

+0

@AlexanderFarber : 그렇다면 여전히 합리적인 수학적 설명이 있습니다. – Jon

+0

네, 분명히하지만, 내 질문은 어떻게 이것을 해결하기 위해, 어떻게 캐스팅하는 방법입니다 float? –

0

@AlexanderFarber : 아니요, PHP에서는 정수가 0이 아니므로 누락 된 것일 수 있습니다. 일반적인 분열을 사용하십시오.