2012-03-17 2 views
3

В a Russian card game я пытаюсь вести статистику о том, как часто игрок ругается (говорит «плохие слова» - и у нас есть много из них на русском языке) в следующей таблице PostgreSQL:Целочисленное деление в PHP дает нуль - как его отличить от float?

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

К сожалению, у меня была опечатка в моем оригинальный вопрос ... The $ фактор действительно 0, я распечатать его. Я также попытался следующие, но все равно нулю:

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

+1 для swearometer ... – biziclop

+0

Рассмотрите возможность перемещения вычислений со стороны PHP в базу данных; они являются исключительно мощными инструментами для хруста данных, и это прекрасный пример. – jmkeyes

ответ

1

Ну, $row['swear']/(1 + $row['lines']) всегда будет < .05 учитывая число перечисляют. Поэтому, когда вы умножаетесь на 20, а затем floor, вы очень правильно получите 0.

+0

Нет-нет, это опечатка в тексте вопроса, извините - я сейчас ее обновил. Фактор $ действительно 0, я распечатал его. –

+0

@AlexanderFarber: Хорошо, но все же есть очень разумное математическое объяснение. – Jon

+0

Да, очевидно, но мой вопрос заключается в том, как исправить это, как бросить плавать? –

0

@AlexanderFarber: Нет, извините целочисленное деление на PHP не дает нуля, возможно, вы что-то не хватает. Просто используйте свое обычное разделение.

 Смежные вопросы

  • Нет связанных вопросов^_^