首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript解析int64

Javascript解析int64
EN

Stack Overflow用户
提问于 2011-03-18 22:27:14
回答 5查看 45.4K关注 0票数 22

如何在Javascript中将长整型(字符串)转换为数字格式,而不使用javascript对其进行舍入?

代码语言:javascript
复制
var ThisInt = '9223372036854775808'
alert(ThisInt+'\r' +parseFloat(ThisInt).toString()+'\r' +parseInt(ThisInt).toString());

在将其转换为字符串之前,我需要对其执行加法操作&如果可能的话,我不希望必须将其分成两部分。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-03-18 22:34:33

Javascript中所有的 Numbers都是64位的双精度IEE754浮点数。

因此,可以准确表示的最大正整数是2^53 - 1。剩余的位保留为指数。

您的数字恰好是1024倍,因此丢失了3位小数位的精度。它根本不能被更准确地表示。

在ES6中,你可以使用Number.isSafeInteger( # )来测试一个数字,看看它是否在安全范围内:

代码语言:javascript
复制
var ThisInt = '9223372036854775808'; 
console.log( Number.isSafeInteger( parseInt( ThisInt ) ) );

不过,还有一个BigInteger库,它应该能够提供帮助,避免您必须自己做所有的字符串和琐碎的工作。

EDIT 2018/12现在Chrome和NodeJS中有一个原生BigInt类(和新的文字语法)。

票数 34
EN

Stack Overflow用户

发布于 2011-03-18 22:36:53

借助递归的一些帮助,您可以直接递增您的十进制字符串,无论它表示一个64位或更多的数字……

代码语言:javascript
复制
/**
 * Increment a decimal by 1
 *
 * @param {String} n The decimal string
 * @return The incremented value
 */
function increment(n) {
    var lastChar = parseInt(n.charAt(n.length - 1)),
        firstPart = n.substr(0, n.length - 1);

    return lastChar < 9
        ? firstPart + (lastChar + 1)
        : firstPart
            ? increment(firstPart) + "0"
            : "10";
}
票数 2
EN

Stack Overflow用户

发布于 2011-03-18 22:45:20

你不能用标准的Javascript做到这一点。但是像往常一样,有一个漂亮的小库可以帮我们解决这个问题,在本例中是BigInt.js,它将允许您使用任意精度的整数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5353388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档