【问题标题】:Setting precision in PHP在 PHP 中设置精度
【发布时间】:2014-05-16 19:33:38
【问题描述】:

我在运行 Windows 的笔记本电脑上安装了 PHP 5.5。 我正在访问 Smartsheet API,我应该得到一个 18 位(有时是 17 位)的列 id。但我得到了一个科学数字:

1.5441916385627E+15,不是1544191638562692

我在 Ubuntu 服务器环境中运行脚本,我看到 1544191638562692。同样,在 OS X Maverick 环境中运行,它与整数格式相同。

我一直在找这件事,好像是精确的。

如果我在 php 中设置,OS X Maverick 环境的精度为 14,如下所示:

<?php
ini_set('precision', 14);

    echo (float)$col->id;
    // 1.5441916385627E+15
?>

我也得到了科学数字。

谁能帮我出个主意?

【问题讨论】:

  • 如果这是一个id,则不应将其视为数字,而应视为字符串值。
  • 如果我不得不猜测,我会说您获得科学记数法答案的机器运行的是 32 位 PHP,而 Ubuntu 机器运行的是 64 位。如果您处理的 ID 号超过约 20 亿,则应将它们视为 CBroe 建议的字符串以实现兼容性。

标签: php precision scientific-notation smartsheet-api


【解决方案1】:

正如 cmets 中提到的,这听起来像是运行 32 位 PHP 的问题。 Smartsheet 确实提供了一些 sample PHP code 来帮助您开始使用 API。在这些示例中,文档建议您将 id 视为 32 位 PHP 中的字符串:

https://github.com/smartsheet-platform/samples/tree/master/php/1-HelloSmartsheet#dependencies

【讨论】:

    【解决方案2】:

    您可以在所有机器上使用 PHP 中的格式化字符串函数以相同的方式输出数字,有关文档,请参阅http://nl1.php.net/manual/en/function.sprintf.php

    因此,如果您希望将整数作为一个整体,您可以使用:

    printf("%u", $number);
    

    【讨论】:

    【解决方案3】:

    有一种可能的方法,例如,将 JSON 转换为我必须指定 JSON_BIGINT_AS_STRING 的数组:

    $ColumnsArray = json_decode($data, true,515,JSON_BIGINT_AS_STRING);
    

    【讨论】:

      猜你喜欢
      • 2012-09-02
      • 1970-01-01
      • 2018-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-15
      • 2018-06-21
      • 1970-01-01
      相关资源
      最近更新 更多