为什么我在不同的在线编译器上得到不同的输出?

时间:2019-09-11 07:21:00

标签: php

我编写了一个程序来反转在线编译器中的数字。 我已经在三个在线编译器上检查了我的代码。 在writephponline和paiza.io上我得到正确的输出,而在phpfiddle.org上我得到一些奇怪的答案?

产生不同输出的是什么?

我已经使用了下限功能对值进行四舍五入,但是我猜并没有什么区别。

function reverse($n){
  $count = strlen((string)$n);
  $b=0;
  for($i=0;$i<$count;$i++){
      $a = $n%10;
      $n = floor($n/10);
      $b = ($b+$a)*10;
    }
  return $b/10;
}

echo reverse(123456789);

我希望所有在线编译器的答案都相同,但是输出却不同。

2 个答案:

答案 0 :(得分:1)

我不确定phpfiddle.org的确切问题是什么,但是似乎%运算符在这里不能正常工作。将其更改为fmod()会产生正确的结果

<?php

function reverse(int $n){
  $count = strlen((string)$n);
  $b=0;

  for($i=0;$i<$count;$i++){
      $a = fmod($n, 10);
      $n = floor($n/10);
      $b = ($b*10)+$a;
    }
  return $b;
}

echo reverse(123456789);
?>

更新:找出确切的问题。 phpfiddle在32位系统上设置,并且正在溢出。这就是为什么fmod()有效的原因。检查类似的问题@ php modulo return wrong result

答案 1 :(得分:1)

这是由%引起的,PhpFiddle的操作不正确。只需在%<?php print_r(123456789%10); echo "\n"; print_r(123456789 % 10); ?> 之前留出空间,即可使其正常工作。

123456789 9

将输出

$number = 123456789;
$reverse = join(array_reverse(str_split($number)));
echo $reverse;

您可以反向使用

<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass="App\Repository\BookRepository")
 */
class Book
{
    public const BOOK_FILE = 'book.pdf';
    public const BOOK_COVER = 'cover';

    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="boolean", options={"default":false})
     */
    private $file;

    /**
     * @ORM\Column(type="boolean", options={"default":false})
     */
    private $cover;

    // set default values
    public function __construct()
    {
        $this->file = false;
        $this->cover = false;
    }
    // build book public directory according to its' Id, like /0-10/1/
    public function getBookDir()
    {
        $folder = (int) floor($this->getId() / 10) * 10;
        $path = '/' . $folder . '-' . ($folder + 10) . '/' . $this->getId();
        return $path;
    }

    public function getFilePath()
    {
        return $this->getBookDir() . '/' . Book::BOOK_FILE;
    }

    public function getCoverPath()
    {
        return $this->getBookDir() . '/' . Book::BOOK_COVER;
    }

    // and other generic setters
}