首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP中的意外行为-相同的代码在C#和Python中提供了正确的结果

PHP中的意外行为-相同的代码在C#和Python中提供了正确的结果
EN

Stack Overflow用户
提问于 2012-09-06 18:18:37
回答 6查看 491关注 0票数 16

为什么PHP会为以下代码返回INF (infinity):

代码语言:javascript
复制
<?php
$n = 1234;
$m = 0;

while ($n > 0)
{
    $m = ($m * 10) + ($n % 10);
    $n = $n / 10;
}

var_dump($m);
?>

预期的结果是4321,但返回的是INF,浮动类型:

代码语言:javascript
复制
float INF

我用和C#编写了相同的代码,并获得了预期的输出- Python 4321

Python

代码语言:javascript
复制
n = 1234
m = 0

while (n > 0):
    m = (m * 10) + (n % 10)
    n = n / 10

print m

C#

代码语言:javascript
复制
static void Main(string[] args)
{
    int n = 1234;
    int m = 0;

    while (n > 0)
    {
        m = (m * 10) + (n % 10);
        n = n / 10;
    }

    Console.WriteLine(m);
    Console.ReadLine();
}
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-09-06 18:25:23

在php中,$n / 10将返回一个浮点数,而不是整数。

因此,$n > 0将始终为true

更改while($n > 0)

设置为while($n > 1)while((int)$n > 0),那么您将获得正确的结果。

票数 13
EN

Stack Overflow用户

发布于 2012-09-06 18:23:59

PHP是无类型的,可以“即时”转换。

这意味着,你的浮点数永远不会是'0‘或更低,因为在需要的时候,$n将是一个’$n‘。

尝试检查< 1,您应该没问题。

为了澄清这一点,$n的行为如下所示:

$n = 1234 $n = 123.4 $n = 12.34 $n = 1.234 $n = 0.1234 $n = 0.01234等

含义:$n将始终接近0,但永远不会达到它。这使得$m是无限的,因为循环本身是无限的。

票数 6
EN

Stack Overflow用户

发布于 2012-09-06 18:23:54

正在发生的情况是:

代码语言:javascript
复制
$n = $n / 10;

正在执行浮点数除法而不是整数除法,因此$n永远不会达到0的值,它只是接近0的值,即0.0...1234。

将上面的代码更改为:

代码语言:javascript
复制
$n = (int)($n / 10);

将会解决这个问题。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12297872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档