我需要执行json_encode()
并将我的原始号码转换为:
50610101800060384093800100001010000000056199999999
到
"50610101800060384093800100001010000000056199999999"
但它返回
5.061010180006E+49
我尝试过:
ini_set('precision', 30); //With 1, 30, 50, 100, 1000
ini_set('serialize_precision', -1);
'content' => json_encode($params, JSON_NUMERIC_CHECK)
但不起作用。你能帮我吗?
答案 0 :(得分:2)
50610101800060384093800100001010000000056199999999超出了PHP中最大整数的值,因此将其提升为浮点数并以科学计数法表示。如手册warning about floating point precision中所述,浮动结果可能由于各种原因而有问题。
如果希望将值表示为整数,则必须将其封装在字符串中。您可以在该字符串上添加零,但以科学计数法表示的结果将引用浮点数,如下所示:
<?php
$s = "50610101800060384093800100001010000000056199999999";
echo $s,"\n";
$x = $s + 0;
echo $x, "\n",is_float($x);
请参见here。
有关PHP和float的更多信息,请参见here。
另一方面,如果有一个数字数组,其数字与OP帖子中的数字显示相对应,则可以编写如下代码:
<?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);
请参见live code。
此示例起作用的原因是因为每个数组值都转换为数字字符串,然后将各个元素连接起来以形成一个很长的数字字符串。 BC Math是PHP中的扩展,支持任意精度。在这种情况下,bcadd()函数将一加到数字字符串上,从而显示递增的数字字符串值。
答案 1 :(得分:1)
尝试[[https://3v4l.org/biNJG][1]
如果要此输出"50610101800060384093800100001010000000056199999999"
您可能想使用json_encode
将值编码为JSON后,将该值作为字符串传递
整数数据类型是介于-2,147,483,648和2,147,483,647之间的非十进制数字。
整数规则:
整数必须至少包含一位数字
一个整数不能有小数点
一个整数可以是正数或负数
整数可以三种格式指定:十进制(从10开始),十六进制(从16开始-带有0x前缀)或八进制(从8开始-带有0前缀)