PHP中的整数除法会产生零 - 如何将其转换为浮点数?

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 "

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可能正在执行"整数除法"。 我尝试在$row['swear']$row['lines']前添加floor()以将它们"转换"为浮点数 - 但是这没用。 更新:对不起,我原来的问题中有一个打字错误...商确实是0,我打印出来了。我也尝试了以下操作,但仍然是零:
$quot = 100 * floor(20 * $row['swear'] / (.1 + $row['lines']));

考虑将计算从 PHP 端移动到数据库中;它们是数据处理的非常强大的工具,这是一个完美的例子。 - jmkeyes
2个回答

1

嗯,给定您列出的数字,$row['swear'] / (1 + $row['lines']) 总是会小于 .05。因此,当您乘以 20 并然后再使用 floor 函数时,您将得到正确的结果 0


不好意思,我的问题文本中有一个打字错误 - 我现在已经更新了它。$quotient 真的是0,我已经打印出来了。 - Alexander Farber
@AlexanderFarber:好的,但仍然有一个非常合理的数学解释。 - Jon
当然可以,但我的问题是如何解决这个问题,如何转换为浮点数? - Alexander Farber
1
@AlexanderFarber:转换什么?您要求例如floor(0.50),并且正确地获得了0。就是这样。也许您的意思是类似于floor(100 * $row['swear'] / (1 + $row['lines']))的东西? - Jon

0

@AlexanderFarber:不好意思,在PHP中整数除法不会得到零,也许你漏了什么。只需使用常规除法即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接