2012-03-17 19 views
3

私は(「悪い言葉」と言う - と我々はロシア語でそれらの多くを持っている)プレイヤーは誓う頻度の統計を維持しようとしている次のPostgreSQLのテーブルに:PHPの整数部はゼロを生成します - それを浮動小数点にキャストする方法は? <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 Swarometer ... – biziclop

+0

計算をPHP側からデータベースに移動することを検討してください。データ処理のための非常に強力なツールですが、これは完璧な例です。 – jmkeyes

答えて

1

まあ、$row['swear']/(1 + $row['lines'])はいつもあなたがリスト番号与えられた< .05だろう。したがって、20を掛けてfloorとすると、正しくは0になります。

+0

いいえ、それは私の質問テキストの入力ミスです、申し訳ありません - 私は今更新しました。 $商は実際に0です、私はそれを印刷しました。 –

+0

@AlexanderFarber:そうですが、それでもなお非常に合理的な数学的説明があります。 – Jon

+0

はい、明らかに、私の質問はどのように浮動小数点型にキャストするこれを修正する方法ですか? –

0

@AlexanderFarber:いいえ、申し訳ありませんが、PHPの整数除算はゼロを与えていない可能性があります。あなたの通常の除算を使用してください。

関連する問題