2013-07-10 14 views
7

CASE # 1: I持って正しい番号整数型キャストの問題

<?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:の場合数字を1つ小さくしてキャストしたら、正しい数字を返します。

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

CASE # 2に正しい出力が得られないのはなぜですか?

+0

が見えます。整数の最大値は2147483647です。ここでそれを読んでください:http://php.net/manual/en/language.types.integer.php – SamHuckaby

+0

ええ、Integer型の制限を超えました。既知の最大整数に変換されます。 – MurifoX

+0

PHPが文字列(またはその番号を扱えるもの)に自動的に変換されるため、最初のケースが「機能する」ことに注意してください。 – SamHuckaby

答えて

4

あなたのプラットフォームでは、intの最大値を超える可能性があります。 Official PHP Docから

:約20億の最大値 が通常の値(すなわち、32ビット符号付きだ)であるが、整数の

サイズは、プラットフォームに依存しています。整数のサイズは、定数PHP_INT_SIZEを使用して決定された と、PHP 4.4.0およびPHP 5.0.5以降の定数PHP_INT_MAXを使用する最大値 を使用できます。

整数であることができるから-2147483648 64ビットプラットフォームの

2147483647:32ビット・プラットフォームの場合

整数は-9223372036854775808から9223372036854775807であることができます

+0

うん、それは今意味があります。代わりに 'float'を使用して、正しい番号を出力します。ありがとう! –

+0

あなたの問題が解決したことを嬉しく思います。 – anubhava

1

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

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

定数PHP_INT_SIZEは最大であるPHPインストールにintサイズをサポートするどのようなことを教えてくれます。

0

整数の最大値はプラットフォームに依存しますが、約20億です。ケース#2は100億です。

あなたはfloatを使う型キャストする場合、それははるかに高い限界があり...

参考:あなたは整数型の限界を超えているようhttp://php.net/manual/en/language.types.integer.php

関連する問題