【问题标题】:JSON.parse fails for negative floating point numbersJSON.parse 因负浮点数而失败
【发布时间】:2015-07-05 06:14:22
【问题描述】:

我有一个这样的简单脚本:

request = $.ajax({
          url: "/getmesomefloats.php",
          type: "post",
        });

        request.done(function (response, textStatus, jqXHR){
            // Log a message to the console
            console.log(response, textStatus);
            if(textStatus == 'success') {
              console.log($.parseJSON(response);
            }
        });

getmesomefloats.php 看起来像这样:

  $points[] = array(-14.27664,-170.6878);
  $points[] = array(-16.29323,-165.3741);
  $points[] = array(-15.86157,-162.7885);
  $points[] = array(-15.89847,-160.2066);
  echo json_encode($all_points);

第一个控制台日志调用吐出这个字符串:

[[-14.27664,-170.6878],[-16.29323,-165.3741],[-15.86157,-162.7885],[-15.89847,-160.2066]] success

$.parseJSON(或 JSON.parse(response))吐出这个(在控制台中“扩展”):

[Array[2], Array[2], Array[2], Array[2]]
  0: Array[2]
    0: -1589268.2950388812
    1: NaN
    length: 2
    __proto__: Array[0]
  1: Array[2]
    0: -1813754.066977689
    1: NaN
    length: 2
    __proto__: Array[0]
  2: Array[2]
    0: -1765701.8955818643
    1: NaN
    length: 2
    __proto__: Array[0]
  3: Array[2]
    0: -1769809.5847921362
    1: NaN
    length: 2
    __proto__: Array[0]
  length: 4
  __proto__: Array[0]

我不明白为什么我得到 NaN 以及为什么例如 -14.27664 转换为 -1589268.2950388812 ?我应该怎么做才能获得正确的值? 对于javascript来说,浮点数是否需要处理很多? 额外信息:浮标是 GPS 坐标,我(将要)在地图脚本中使用它们,此处未包含。

【问题讨论】:

  • 为什么不把它们放在一个字符串中,我不确定是什么原因造成的。因为我只是浮点字符串
  • 处理浮点值没有任何问题,JavaScript 对所有数字使用双精度浮点数。当我尝试在 Firefox 中使用 JSON.parse 解析该字符串时,它工作得很好。你用的是什么浏览器?
  • 嗨 Guffa 和 Bob,我正在使用 Chrome。 Bob,如果我要使用字符串,你会建议我编写一些自定义函数来解析返回的数组吗?错误可能与浏览器有关吗?
  • 大家好,我正面临 JSON 中负浮点值的类似问题

标签: javascript ajax json floating-point string-parsing


【解决方案1】:

鉴于 JavaScript 无法处理,[[-14.27664,-170.6878],[-16.29323,-165.3741],[-15.86157,-162.7885],[-15.89847,-160.2066]] 中没有任何内容。

也许您可以尝试在请求中包含原始输出,以防在您提供的 console.log 输出中我看不到某些内容。

【讨论】:

  • 感谢您的帮助 - 如何发布原始输出?
【解决方案2】:

我在从维基百科复制/粘贴的一些数据中解析负值时遇到问题。事实证明,减号是错误的字符(ascii 十进制 150 而不是 45)。

【讨论】:

    猜你喜欢
    • 2021-12-08
    • 2020-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-30
    • 2015-08-17
    • 2021-04-22
    • 1970-01-01
    相关资源
    最近更新 更多