簡體   English   中英

PHP json_encode string to big float

[英]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 object {"big_float1": 9876543210999999999.01, "big_float2": 9876543210999999999.01, "float1": 2.2}

由於從字符串到浮點數的轉換需要由 PHP 完成,因此這是不可能的。 64 位 PHP 的最大 integer 值為 9223372036854775807,這比您需要的要少。 您可以嘗試兩種解決方法:

  • 如果該系統可以處理如此大的數字,則將值作為字符串發送並解碼並強制轉換為接收端的浮點數
  • 將數字分成 3 個元素:(1) 在另一個字段中將小數部分作為 integer 發送; (2) 通過在預定的 position 處拆分字符串,將 integer 部分分成兩部分。如果你決定為第 5 個 position 這樣做,那么你將得到9999998765432109999 在接收端,您可以通過first_part * 10^5 + second_part重新創建原始號碼
  • 如果您可以移出小數部分(並將其發送到另一個字段)並且僅處理 integer 部分的正值,則可以擴展整數空間。 在這種情況下,當您的代碼計算值時,您可以從PHP_INT_MIN + value1 + value2 + value4...開始。 這樣您就可以使用整個 2^64 空間(小於 2^63 的值將為負數)。 唯一的就是在接收端加上2^64和小數部分。
  • 如果您不能改變接收端解碼消息的方式,您唯一的方法是使用目標語言的子系統來處理如此大的數字並使用它來發送消息。 您的處理將由 PHP 完成並保存到磁盤,發送到端口或進行系統調用,小腳本將處理生成的消息並發送它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM