7

CASE # 1:我有以下代码输出正确的数字

<?php 
   $integer = 10000000000;
   $array = array($integer);
   print_r($array[0]); //output = 1000000000
?>

CASE # 2:但是当我明确地将相同的数字转换为整数时,它会给出不同的输出

<?php
    $integer = (int)10000000000;
    $array = array($integer);
    print_r($array[0]); //output = 1410065408
?>

CASE # 3:如果我将数字缩小一个 0 并键入它,那么它会返回正确的数字

<?php
   $integer = (int)1000000000;
   $array = array($integer);
   print_r($array[0]); //output = 1000000000
?>

为什么它没有产生正确的输出CASE # 2

4

3 回答 3

4

您很可能会超过平台上 int 的最大值。

来自官方 PHP 文档

整数的大小取决于平台,尽管通常值约为 20 亿的最大值(即 32 位有符号)。自 PHP 4.4.0 和 PHP 5.0.5 起,可以使用常量 PHP_INT_SIZE 确定整数大小,使用常量 PHP_INT_MAX 确定最大值。

对于 32 位平台:

整数可以从 -2147483648 到 2147483647

对于 64 位平台:

整数可以从 -9223372036854775808 到 9223372036854775807

于 2013-07-10T20:50:17.433 回答
1

在第二个示例中,您溢出了整数的最大大小。在您的第一个示例中,PHP 自动使用更大的数字数据类型float来保存变量,因为它对于 int 来说太大了。当您int在示例 2 中将其显式转换为 a 时,因为它大于最大大小,所以会将其截断为最大大小。在示例 3 中,该数字足够短,可以包含在int. 如果您尝试将其转换为 a float,它将产生正确的结果。

<?php
    $integer = (float)10000000000;
    $array = array($integer);
    print_r($array[0]); //output = 10000000000
?>

该常量PHP_INT_SIZE将告诉int您 php 安装支持的最大大小是多少。

于 2013-07-10T20:53:36.720 回答
0

整数的最大值取决于平台,但大约为 20 亿。案例 #2 是 100 亿。

如果你想使用浮点数进行类型转换,它有更高的限制......

参考: http: //php.net/manual/en/language.types.integer.php

于 2013-07-10T20:53:55.510 回答