由于PHP的浮点数大小有限制(最大14位),我使用字符串来处理大的浮点数,在我的情况下,我有19位真实的和2位精度,我需要一个解决方案来JSON编码一个包含这些数字的数组,但也可以将它们从字符串类型转换为浮点类型。
使用JSON_NUMERIC_CHECK
标志不会有帮助,因为数字太大
<?php
$array = array(
"big_float1" => "9876543210999999999.01",
"big_float2" => "9876543210999999999.01",
"float1" => 2.2
);
$json = json_encode($array,JSON_NUMERIC_CHECK);
?>
在上面的代码中,我需要这样的JSON对象{"big_float1" : 9876543210999999999.01, "big_float2" : 9876543210999999999.01, "float1" : 2.2}
1条答案
按热度按时间pgx2nnw81#
因为字符串到浮点数的转换需要PHP来完成,所以这是不可能的。64位PHP的最大整数值是9223372036854775807,这比你需要的要小。你可以尝试以下几种解决方法:
99999
和98765432109999
。在接收端,您可以通过first_part * 10^5 + second_part
重新创建原始数字PHP_INT_MIN + value1 + value2 + value4...
开始。这样您将可以使用整个2^64空间(小于2^63的值为负数)。唯一的办法是在接收端加上2^64和小数部分。