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

2 番目の例では、整数の最大サイズをオーバーフローしています。float最初の例では、PHPは int には大きすぎるため、変数を保持するなどのより大きな数値データ型を自動的に使用します。例 2 で明示的にキャストするとint、最大サイズよりも大きいため、その最大サイズに切り捨てられます。例 3 では、数値は十分に短いため、int. にキャストしようとfloatすると、正しい結果が得られます。

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

この定数は、php インストールでPHP_INT_SIZEサポートされている最大サイズを示します。int

于 2013-07-10T20:53:36.720 に答える
0

整数の最大値はプラットフォームによって異なりますが、約 20 億です。CASE #2 は 100 億です。

フロートを使用してタイプキャストしたい場合は、はるかに高い制限があります...

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

于 2013-07-10T20:53:55.510 に答える