ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

JavaScript的内置Number()方法似乎返回了一个不正确的值

2019-05-27 07:19:35  阅读:135  来源: 互联网

标签:javascript numbers built-in


我已经制作了一个转换数字基数的程序.我认为,如果输出中没有字符AF,将数字作为数字而不是字符串返回会很方便(即使我将基数为2的数字作为常规十进制数返回,无论如何) .

出于某种原因,当我将A3B232转换为Binary(应该是10100001101011001002 [Wolfram|Alpha source])时,我得到1010000110101100200.那里有两个,那不是二进制!返回值的最后一行代码是:

return (toBase <= 10) ? Number(result) : result;

这基本上适用于所有测试,直到我决定使用上面的base-32数字.我认为我的程序正在执行除法/余数步骤不正确,所以我让它在返回值之前打印出结果.它正确地给出了1010000110101100100.所以,我直接在Chrome的控制台中测试了Number()方法.这就是发生的事情:

> Number("1010000110101100100")
> 1010000110101100200

我误解了Number()方法的作用吗?为什么将由所有Ones和Zeroes组成的字符串转换为包含Ones,Zeroes和Twos的数字?

解决方法:

你在调用Number(“1010000110101100100”)时正在做的是传递一个字符串,它试图把它变成一个数字,但是这个数字高于JavaScript可以计算的数字,即9,007,199,254,740,991(也称为Number.MAX_SAFE_INTEGER)

基本上,任何超过9,007,199,254,740,991的数字都不能可靠使用,因为JavaScript使用double-precision floating-point format numbers中指定的double-precision floating-point format numbers

以下是一些示例,以下输入数字“应该”与输出相同,但不是因为它们已超过MAX_SAFE_INTEGER.有些是,但它不可靠,如下面的大额奖励乐趣部分所示.

Number("9007199254740992") // 9007199254740992
Number("9007199254740993") // 9007199254740992
Number("9007199254740994") // 9007199254740994
Number("9007199254740995") // 9007199254740996
Number("9007199254740996") // 9007199254740996
Number("9007199254740997") // 9007199254740996
Number("9007199254740998") // 9007199254740998
Number("9007199254740999") // 9007199254741000

如果您仍想将十六进制转换为二进制,则需要使用parseInt和Number.prototype.toString并将其保留为字符串.

const hex = "A3B2";
const binary = parseInt(hex, 16).toString(2);
console.log(binary);

与大数字的奖金乐趣

以下是真的!

console.log(9007199254740992 === 9007199254740993);
console.log(1010000110101100200 === 1010000110101100100)

文档

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number

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

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toString

标签:javascript,numbers,built-in
来源: https://codeday.me/bug/20190527/1161583.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有