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

时间:2016-09-09 07:40:19

标签: php regex preg-replace

复制问题: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部分。它的角度

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]

1 个答案:

答案 0 :(得分:2)

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

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

将这些值转换为floatdouble实际上)的任何更大的内容。

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