2013-12-09 1 views
-2

Я переписываю программу BASIC на PHP. Я перебежать проблемы, позвольте мне объяснить:Несоответствие между BASIC INT и PHP int, как решить?

В ОСНОВНОЙ коде я имею следующее заявление со значениями:

LSLATVER=1590 
PITCHVER=50 

NRSLATHOR=INT(LSLATVER/PITCHVER-.8) 
// output: 30 

В PHP код у меня есть два примера, как это:

$length_vertical_slat = 1590; 
$vertical_pitch = 50;  

echo $number_of_horizontal_slats = (int) ($length_vertical_slat/$vertical_pitch - .8); 
// output: 31 

echo $number_of_horizontal_slats = (int) ($length_vertical_slat/($vertical_pitch - .8)); 
// output: 32 

Почему существует такая огромная разница между тремя примерами? Мне нужен PHP для вывода значения 30 в этом примере, но я не вижу, как это сделать. Пожалуйста, помогите!

+1

Вы пробовали с http://www.php.net/intval? – Matteo

+0

Читайте по математике с плавающей запятой. Для математики с плавающей запятой php используйте 'bcmath': http://php.net/manual/en/book.bc.php – Nanne

+3

Первое, что нужно заметить, - это ваша основная математика вне '$ var/$ var - $ float' is не то же самое, что '$ var/($ var - $ float)' скобки оцениваются с первой математикой 101. Вторая вещь, которую следует заметить, заключается в том, что ваш жесткий листинг это как INT так php делает предмет логики и округляет от 30,5 до 31 31. Ваше первое утверждение верно, но удалите жесткий листок – Dave

ответ

1

BASIC использует целочисленное деление, а также снижение конечного результата к междунар, так что вы хотите, чтобы имитировать это в PHP (PHP преобразует в float по умолчанию, а не сокращение к int).

Это означает, что на этапах BOTH (деление и вычитание) вам нужно уменьшить значение до int. В PHP документы рекомендуем делать это путем литья на int, как вы это делали в ваших примерах:

$length_vertical_slat = 1590; 
$vertical_pitch = 50;  

// outputs 30 
echo $number_of_horizontal_slats = (int)((int)($length_vertical_slat/$vertical_pitch) - .8); 

От the PHP docs:

Там нет оператора целочисленного деления в PHP. 1/2 дает поплавок 0.5. Значение может быть отлито для целого числа, чтобы округлить его вниз, [...]

+0

Ты мой герой чувак. – TheRealWitblitz