preg_replace 将数字字符串转换为指数格式

preg_replace converting number string into exponent format

重复的问题:https://3v4l.org/n4qDK

所以我有这个代码

    $pattern = array("/cash-equivalents_quarterly/" , "/total-assets_quarterly/");

    $replace_data["cash-equivalents_quarterly"] = 169677928570;
    $replace_data["total-assets_quarterly"] = 222617965672000000000;

    $formula["1"] = " cash-equivalents_quarterly / total-assets_quarterly";


    $amount1 = preg_replace($pattern,$replace_data,$formula["1"]);

    return array( "replace_data" => $replace_data , "formula1" => $formula["1"] , "pattern" => $pattern  , "amount1" => $amount1 );

我得到 amount1 作为 169677928570 / 2.22617965672E+20。虽然我期望 169677928570 / 222617965672000000000

只有当我发出 ajax 请求并且它会处理大量数据(foreach 循环)后端时才会发生这种情况。但是,如果我单独尝试 运行 这个简单的函数,它就不会发生。

我该如何解决这个问题?我想要纯数字而不是指数格式。

增加Javascript部分。它的 angular

setFactory.submitFilterFormula($scope,function(results){
    console.log(results);
});

factory.submitFilterFormula = function($scope,callback){
        $scope.url = '/api/screener/submitFilterFormula';
        // console.log($scope.post_data);
        factory.doPostHttpRequest($scope).success(callback); 
    }

[![在此处输入图片描述][1]][1]

原题用字符串替换,当然没有问题。更新后的问题也没有显示任何问题。

它是一个documented behaviour:在32位系统和PHP之前的所有Windows系统上PHP中可以表示为整数的最大整数7 略大于 2,000,000,000(2147483647 更精确)。在64位系统上(除了PHP 5 for Windows),可以表示为整数的最大值是2^63-19223372036854775807).

任何大于这些值的值都将转换为 float(实际上是 double)。

total-assets_quarterly 的替换值大约是此限制的 23 倍。如果您不需要对其进行算术运算,则将其用作 PHP 中的字符串以避免转换。