我一直在寻找一段时间,但我能找到的不是我寻找的东西.我需要将一个可能非常大的整数值转换为字符串.听起来很简单:"$var"?不,因为这可以导致E+数字的表示.
<?php
$var = 10000000000000000000000000;
echo $var."\n";
echo "'$var'\n";
echo (string) $var."\n";
echo strval($var);
?>
Run Code Online (Sandbox Code Playgroud)
1.0E+25
'1.0E+25'
1.0E+25
1.0E+25
Run Code Online (Sandbox Code Playgroud)
我怎样才能改变输出10000000000000000000000000?
如PHP文档中所述,当json_decode包含长整数的数据结构时,它们将被转换为浮点数.解决方法是使用JSON_BIGINT_AS_STRING,它将它们保留为字符串.当json_encode输入这些值时,JSON_NUMERIC_CHECK会将这些数字编码回大整数:
$json = '{"foo":283675428357628352}';
$obj = json_decode($json, false, JSON_BIGINT_AS_STRING);
$json2 = json_encode($obj, JSON_NUMERIC_CHECK);
var_dump($json === $json2); // true
Run Code Online (Sandbox Code Playgroud)
使用此方法进行正确的数据往返很容易出错.如果属性包含'123'一个应该保留字符串的数字字符串,它将被编码为整数.
我想从服务器获取一个对象,修改一个属性,然后将整个数据结构放回去.我需要保留原始类型.我不想维护我正在操纵的属性.
这有什么真正的解决方法吗?PHP不再存在大的问题,但json_decode例程似乎已经过时了.