所以我的问题是,我正在编写一个程序来检查数字是偶数还是奇数而不除法。所以我决定取这个数字,用
把它变成一个字符串number.toString()
方法。我遇到的问题是,如果您输入的数字长度约为 17 位或更多位,则该字符串的前 17 位数字是正确的,那么它只是 0,有时是 2。例如,
function toStr (number)
{
return number.toString(10);
}
console.log(toStr(123456789123456789));
打印,
123456789123456780
有什么想法吗?
最佳答案
问题与字符串或您的函数完全无关。尝试转到控制台并输入表达式 123456789123456789
并按回车键。
您同样会获得 123456789123456780
。
为什么?
JavaScript 语言中的表达式123456789123456789
被解释为JavaScript 数字类型,只能精确表示到一定数量的两位有效数字。输入数字以二为底表示时的有效数字多于 JavaScript 数字表示中可用的以二为底的有效数字,因此该值会自动以二为底进行四舍五入,如下所示:
123456789123456789 =
110110110100110110100101110101100110100000101111100010101 (base two)
123456789123456780 =
110110110100110110100101110101100110100000101111100001100 (base two)
请注意,您可以在 JavaScript 中准确地表示一些 大于特定大小的数字,但只有那些以二为底的有效数字不超过 JavaScript 的空间的数字。例如,10 的非常大的幂的 2 倍,它在基数 2 中只有 一个 有效数字。
如果您将此程序设计为接受来自窗体或对话框的用户输入,那么您将接收字符串形式的输入。您只需要检查最后一位数字以确定输入数字是奇数还是偶数(假设它确实是一个整数开头)。另一个答案提出了获取字符串最后一个字符的标准方法以及测试字符串值是奇数还是偶数的标准方法。
关于JavaScript toString 限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23706933/