当我使用json_encode时为什么PHP会绕过我的号码?

问题描述:

I need execute json_encode() and convert my original number from:

50610101800060384093800100001010000000056199999999

to

"50610101800060384093800100001010000000056199999999" 

But it return

5.061010180006E+49

I tried this:

ini_set('precision', 30); //With 1, 30, 50, 100, 1000
ini_set('serialize_precision', -1);
'content' => json_encode($params, JSON_NUMERIC_CHECK)

but doesn't work. Can you help me?

我需要执行 json_encode() code>并转换原始编号: p>

  50610101800060384093800100001010000000056199999999 
  code>  pre> 
 
 

to p>

 “50610101800060384093800100001010000000056199999999”
  代码>  pre> 
 
 

但它返回 p>

  5.061010180006E + 49 
  code>  pre> 
 
 

我试过这个: p>

  ini_set('precision',30);  //使用1,30,50,100,1000 
ini_set('serialize_precision', -  1); 
'内容'=>  json_encode($ params,JSON_NUMERIC_CHECK)
  code>  pre> 
 
 

但不起作用。 你能帮助我吗? p> div>

50610101800060384093800100001010000000056199999999 exceeds the value of the maximum integer in PHP and so it is promoted to a float and expressed in scientific notation. The float result may be problematic for various reasons as the Manual explains in warning about floating point precision.

If you wish to express the value as if it were an integer you must encapsulate it in a string. That string you may add zero to it but when you do so the result in scientific notation will refer to a float, as follows:

<?php

$s = "50610101800060384093800100001010000000056199999999";

echo $s,"
";

$x = $s + 0;

echo $x, "
",is_float($x); 

See here.

For more info in re PHP and floats, see here.

On the other hand, if there were an array of numbers whose digits corresponded to the numerical display in the OP's post, you could write code as follows:

<?php
    $a = [5,0,6,1,0,1,0,1,8,0,0,0,6,0,3,8,4,0,9,3,8,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,5,6,1,9,9,9,9,9,9,9,9];
    foreach($a as $e) {
       $e = (string) $e;
    }
    $foo = join($a);
    var_dump($foo);
    $foo = bcadd($foo, 1);
    var_dump($foo);

See live code.

The reason this example works is because each array value is converted to a numerical string and then the individual elements are joined to form one very long numerical string. BC Math is an extension in PHP which supports arbitrary precision. In this case, the bcadd() function adds one to the numerical string which results in the display of an incremented numerical string value.

Try This [https://3v4l.org/biNJG][1]

If you want this output "50610101800060384093800100001010000000056199999999" you may want to pass this Value as string after encoding the value to JSON using json_encode An integer data type is a non-decimal number between -2,147,483,648 and 2,147,483,647.

Rules for integers:

  1. An integer must have at least one digit

  2. An integer must not have a decimal point

  3. An integer can be either positive or negative

  4. Integers can be specified in three formats: decimal (10-based), hexadecimal (16-based - prefixed with 0x) or octal (8-based - prefixed with 0)