提问人:B.Mossavari 提问时间:1/1/2023 最后编辑:B.Mossavari 更新时间:1/2/2023 访问量:99
PHP json_encode字符串到大浮点数
PHP json_encode string to big float
问:
由于 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}
答:
0赞
Zefiryn
1/2/2023
#1
由于从字符串到浮点数的转换需要通过PHP完成,因此这是不可能的。64 位 PHP 的最大整数值为 9223372036854775807,这小于您需要的值。您可以尝试采取以下几种解决方法:
- 将值作为字符串发送,如果系统可以处理如此大的数字,则在接收端解码并强制转换为浮点数
- 将数字分成 3 个元素:(1) 在另一个字段中将小数部分作为整数发送;(2)将整数部分分成2份,在预定位置将字符串分开。如果您决定为第 5 名这样做,那么您将获得 和 .在接收端,您可以通过以下方式重新创建原始号码
99999
98765432109999
first_part * 10^5 + second_part
- 如果可以移出小数部分(并将其发送到另一个字段中)并且只处理整数部分的正值,则可以扩展整数的空间。在这种情况下,当您的代码计算值时,您可以从 .这样,您将可以使用整个 2^64 空间(小于 2^63 的值将为负数)。唯一的事情是在接收端添加 2^64 和小数部分。
PHP_INT_MIN + value1 + value2 + value4...
- 如果无法更改接收端解码消息的方式,则唯一的方法是使用目标语言中的子系统来处理如此大的数字,并使用它来发送消息。您的处理将由 PHP 完成并保存到磁盘、发送到端口或进行系统调用,小脚本将处理生成的消息并发送它。
评论