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 回答