3

ロシアのカードゲームで、プレイヤーがどのくらいの頻度で悪態をつくか (「悪い言葉」を言います。ロシア語にはたくさんあります) の統計を、次の PostgreSQL テーブルに保持しようとしています。

# 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 :

ここに画像の説明を入力

だから私は試しています(CentOS 6.2でPHP 5.3を使用):

    $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はおそらく「整数除算」を行っているため、ゼロになります。

floor()$row['swear']$row['lines'] の先頭に追加して、フロートに「キャスト」しようとしましたが、これは役に立ちませんでした。

アップデート:

申し訳ありませんが、元の質問にタイプミスがありました... $quotient は実際には 0 です。出力します。私も次のことを試しましたが、まだゼロです:

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

2 に答える 2

1

まあ、あなたがリストした数字を考えると、$row['swear'] / (1 + $row['lines'])常に < になります。.05したがって、 を掛ける20と、floor非常に正確に が得られ0ます。

于 2012-03-17T20:25:00.380 に答える
0

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

于 2012-03-22T14:27:47.923 に答える