【问题标题】:JavaScript - Converting from string to number adds trailing 0sJavaScript - 从字符串转换为数字添加尾随 0
【发布时间】:2015-12-15 15:25:50
【问题描述】:

所以我一直在尝试将以下格式的字符串转换为数字:

“20150910095820526”

我尝试过一元运算符,parseInt,parseFloat,但我总是得到这样的结果:

1017219000

代码尝试:

element = parseFloat(element);

element = parseInt(element, 10);

element = ~~element;

完整代码:

    $scope.episodes.forEach(function(element) {
      console.log(parseFloat(element));
    }, this);

我做错了什么?谢谢

【问题讨论】:

  • 粘贴您尝试使用的代码
  • “数字”看起来像一个日期:2015-09-10 09:58.20526 这只是巧合吗?
  • btw 20150910095820526 在 js 中不能表示为数字
  • 什么是element?粘贴完整代码。例如,我将parseInt("20150910095820526") 粘贴到控制台并得到20150910095820530(这是由于浮点数的精度损失而预期的)
  • 如何得到结果1017219000

标签: javascript angularjs string type-conversion


【解决方案1】:

您尝试解析的数字大于 javascript (9007199254740991) 中数字的最大大小。因此,最好将其保留为字符串。如果您需要对该值执行数学运算,可以使用 strint 等库。

Strint 会让你做这样的事情:

var strint = require("./strint");

strint.add("20150910095820526", "1")

'20150910095820527'

【讨论】:

    【解决方案2】:

    您为什么假设 JavaScript 可以表示这么大的数字?

    阅读更多: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER

    【讨论】:

    • 该页面将9007199254740991列为最大数字,小于20150910095820526
    • 20150910095820526 > 9007199254740991。我不知道该怎么说:p
    • 这会使您的“答案”无效。它不能解决 OPs 问题。您已确认 20150910095820526 太大而无法在没有精度损失的情况下表示。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 2014-02-02
    • 2011-08-12
    • 2018-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多