gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 05:27:30 25 4
gpt4 key购买 nike

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

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

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

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

> Number("1010000110101100100")
> 1010000110101100200

我是否误解了 Number() 方法的作用?为什么它将由全 1 和 0 组成的字符串转换为具有 1、0 和 2 的数字?

最佳答案

当调用 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 numbersIEEE 754 中所述

这里有一些例子,下面的输入数字“应该”与输出相同,但不是因为它们已经超过了 MAX_SAFE_INTEGER。有些是,但它并不可靠,如下面的Bonus Fun With LARGE Numbers部分所示。

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

如果您仍然想将十六进制转换为二进制,则需要使用 parseIntNumber.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 的内置 Number() 方法似乎返回不正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53699434/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com