【问题标题】:Discrepancy between BASIC INT and PHP int, how to resolve?BASIC INT 和 PHP int 之间的差异,如何解决?
【发布时间】:2013-12-09 12:13:52
【问题描述】:

我一直在用 PHP 重写一个 BASIC 程序。我遇到了一个问题,让我解释一下:

在 BASIC 代码中,我有以下带有值的语句:

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

为什么这 3 个示例之间存在如此巨大的差异?在此示例中,我需要 PHP 输出 30 的值,但我不知道该怎么做。请帮忙!

【问题讨论】:

  • 你试过php.net/intval吗?
  • 阅读浮点数学。对于 php 浮点数学,使用'bcmath':php.net/manual/en/book.bc.php
  • 首先要注意的是您的基本数学已失效$var/$var - $float$var/($var - $float) 不同,括号首先计算为数学 101。要注意的第二件事是,您很难将其转换为 INT所以 php 正在做 logica 事情并将 30.5 舍入到 31 到 31。你的第一个陈述是正确的,但删除了硬演员
  • 将阅读。我是一个懒惰的程序员,所以请原谅我。原谅我!!!
  • 在这种情况下,floatval()my $vars 也是一种好习惯吗?

标签: php integer basic


【解决方案1】:

BASIC 使用 整数除法,并将最终结果缩减为 int,因此您需要在 PHP 中模仿这一点(PHP 默认转换为 float,而不是减少到int)。

这意味着在两个阶段(除法和减法),您都希望将值减少为 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。该值可以转换为整数以向下舍入,[...]

【讨论】:

  • 你是我的英雄。
猜你喜欢
  • 1970-01-01
  • 2021-07-31
  • 2022-07-25
  • 1970-01-01
  • 2015-10-19
  • 1970-01-01
  • 1970-01-01
  • 2020-01-05
  • 1970-01-01
相关资源
最近更新 更多