当前位置: 首页 > 面试题库 >

用JavaScript错误地舍入了大数

祖浩淼
2023-03-14
问题内容

参见以下代码:

<html>
  <head> 
    <script src="http://www.json.org/json2.js" type="text/javascript"></script>
    <script type="text/javascript">

      var jsonString = '{"id":714341252076979033,"type":"FUZZY"}';
      var jsonParsed = JSON.parse(jsonString);
      console.log(jsonString, jsonParsed);

    </script>
  </head>
  <body>
  </body>
</html>

当我在Firefox 3.5中看到控制台时,jsonParsed的值为:

Object id=714341252076979100 type=FUZZY

即数字是四舍五入的。尝试了不同的值,结果相同(四舍五入)。

我也没有四舍五入规则。714341252076979136舍入为714341252076979200,而714341252076979135舍入为714341252076979100。

编辑: 请参阅下面的第一条评论。显然,这与JSON无关,而与JavaScript数字处理有关。但是问题仍然存在:

为什么会这样呢?


问题答案:

您在这里看到的实际上是两个取整的结果。ECMAScript中的数字在内部表示为双精度浮点数。当id设置为7143412520769790330x9e9d9958274c359十六进制)时,实际上为它分配了最接近的可表示双精度值,即7143412520769790720x9e9d9958274c380)。当您打印出该值时,该值将四舍五入为15个有效十进制数字,即14341252076979100



 类似资料:
  • 问题内容: 在我的课程中,我被告知: 连续值大约在内存中表示,因此使用浮点数进行计算会产生舍入误差。这些是位模式的微小差异。因此,如果和为浮点,则测试是不安全的。 指的是Java。 这是真的?我已经将比较语句与s和s一起使用,并且从未遇到过舍入问题。我从来没有读过类似的教科书。虚拟机肯定占了这一切吗? 问题答案: 是真的。 这是如何在内存中以有限数量的位表示浮点值的固有限制。 例如,该程序显示“

  • 问题内容: 我遇到了(我怀疑是)舍入错误。 我有一个字符串,我正尝试将其转换为双精度型。我已经可以使用函数将其拆分,并且可以很好地捕获基数和指数值。但是,一旦我尝试将它们适当地相乘,就会得到以下结果:。 这是我的相关代码: 那么,如何避免舍入错误?(我有多种方法可以解决此问题,但如果有可能,那么我想知道如何解决该问题) 谢谢。 问题答案: 您不需要拆分它,可以很好地处理这些数字。 看到?有用!

  • 0.05返回0.0 0.15返回0.2 0.25返回0.2 0.35返回0.4 0.45返回0.4 为什么会出现这种情况?更重要的是,我如何才能得到正确的值(舍入0.25时为0.3,舍入0.45时为0.5)?

  • 问题内容: 我不知道这是否是一个明显的错误,但是在运行Python脚本以更改模拟参数时,我意识到缺少和的结果。在调查中,我注意到以下Python代码: 生成的相同文件的增量= 0.28和0.29,与.57和.58相同,原因是python返回float(29)/ 100为。但这不是系统错误,从某种意义上说,它并不是每个整数都发生的。因此,我创建了以下Python脚本: 而且我看不到发生这种舍入错误的

  • 我试图在Java中完善BigInteger,以下是我执行的代码 因此,输出prec1 = 49.32和prec2 = 49.33,对于我的使用情况,我需要始终舍入到49.33,那么除了设置两次比例之外,还有其他方法舍入到49.33吗?

  • 问题内容: 我是Python的初学者,我有一个问题。 为什么用奇数整数部分四舍五入像5.5、7.5((任何).5)这样的数字正确工作(规则5/4),但是用同一个函数将非奇数整数部分像(任何).5进行四舍五入只返回整数部分?(但是,如果我们在该十进制数上加上一个像0.000000001这样的小数字,它将正常工作) 我的意思是下一个: 返回10,这是正确的。但 返回8,这是不正确的。和 返回9。 为什