【问题标题】:preg_replace converting number string into exponent formatpreg_replace 将数字字符串转换为指数格式
【发布时间】:2016-09-09 07:40:18
【问题描述】:

重复问题: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]

【问题讨论】:

  • 无法复制。 3v4l.org/AGt49
  • @PaulCrovella 图片文本只是为了证明我在控制台日志中看到了该结果。 @Jon 是的,正如我所说,单独运行 1 功能时不会发生这种情况。这就是为什么粘贴图片的原因之一。也许我会以某种方式尝试复制。 :S
  • PHP 脚本的输出似乎没有任何问题。这个数字究竟是在哪里转换为科学计数法的?
  • 分享javascript部分。
  • @JonStirling 我在这里复制了3v4l.org/n4qDK

标签: php regex preg-replace


【解决方案1】:

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

这是一个documented behaviour:在 32 位系统和 PHP 7 之前的所有 Windows 系统上的 PHP 中可以表示为整数的最大整数略大于 2,000,000,000(更准确地说是2147483647)。在 64 位系统上(Windows 的 PHP 5 除外),可以表示为整数的最大值是 2^63-1 (9223372036854775807)。

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

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

【讨论】:

  • 谢谢你的解释:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-07
  • 2022-09-21
  • 2015-06-24
  • 1970-01-01
  • 2019-06-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多