我编写了一个程序来反转在线编译器中的数字。 我已经在三个在线编译器上检查了我的代码。 在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);
我希望所有在线编译器的答案都相同,但是输出却不同。
答案 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
}