2016-06-15 10 views
1

私はAPIからデータを取得していますが、長い番号が含まれています(例:7979798798798798798798797987)。この番号をURLに入れる必要があるので、変数は数値である必要はありませんが、正確にそのまま保持する必要があります。現時点では、PHPは自動的に大きな数値を科学的表記に変換します。私はsprintfのようなこれらすべてのことを試してみてストリングとしてキャストしようとしていますが、それは私のためには機能しません。ここでPHPで大量の文字列を使用可能な文字列に変換する

はデモです:

$myvar = 7979798798798798798798797987; //can't change this as this is from api 

echo $myvar; // needs to print out 7979798798798798798798797987 
+4

json_decodeでJSON_BIGINT_AS_STRINGオプションを使用することができる2つの異なるものです。実際にどこかでそれを取得すると、文字列形式でシリアル化されている可能性が高いです。なぜそんなことをしないの? – mario

+0

こんにちはマリオ、ご意見ありがとうございます。あなたが言っていることは、私が思ったことです。値をエコーアウトすると、シリアライズされた文字列としてエコーされます。しかし、私のコードを使用しているクライアントは、それが科学的表記法としてレンダリングされていると言っています。 – user1190132

+2

JSON経由で転送されている場合は、floatに自動的に変換される可能性があります(新しいPHPバージョンでは、long intを保持するために 'JSON_BIGINT_AS_STRING'が提供されます)。 – mario

答えて

0

PHPは整数型の範囲外の数に遭遇した場合、int型の(あなたが持っているものである)の代わりにfloatとして解釈されますが、フロートが制限さを持っています精度は約14桁です。

数値が14桁未満の場合は、sprintf('%0.0f',$number)を使用できます。

現在のフォーム(フロート)からその番号の正確な表現を生成する方法がないため、ソースデータ(json)から作業する必要があります。

あなたは「APIからデータを取得」とPHP変数にリテラルを割り当てる

サンプルテストコード

<?php 
$json = '{"number":7979798798798798798798797987, "data":"some other data"}'; 
$output=json_decode($json, false, 512, JSON_BIGINT_AS_STRING); 
echo $output->number; \\output 7979798798798798798798797987 
?> 
関連する問題