Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript如何处理整数?_Javascript_String_Types_Integer - Fatal编程技术网

JavaScript如何处理整数?

JavaScript如何处理整数?,javascript,string,types,integer,Javascript,String,Types,Integer,上下文 我有一段代码,允许用户单击“变量(任意)元素”,提示输入一个数字,并根据“变量函数”查看他们单击的元素中/上生成的该数字的处理版本。我将在下面提供更全面的描述和原始代码。跳到底部回答问题 详细描述 我有一个类似于square(root){return root*root;}的函数。显然,它需要一个数字,并返回该数字乘以自身。我还有另一个类似的printNum(input){returninput;}-希望不需要解释 浏览器使用事件监听器调用它们,事件监听器的目标是var element=

上下文

我有一段代码,允许用户单击“变量(任意)元素”,提示输入一个数字,并根据“变量函数”查看他们单击的元素中/上生成的该数字的处理版本。我将在下面提供更全面的描述和原始代码。跳到底部回答问题

详细描述

我有一个类似于
square(root){return root*root;}
的函数。显然,它需要一个数字,并返回该数字乘以自身。我还有另一个类似的
printNum(input){returninput;}
-希望不需要解释

浏览器使用事件监听器调用它们,事件监听器的目标是
var element=document.getElementById(“唯一键”)
,它看起来像
element.addEventListener('click',promptFunction)

promptFunction使用
var functionPlug=
[functionsListedAbove]
指向
窗口的输入。提示符('inputvar')
指向
元素。innerHTML

原始代码

//在哪里写
var元素=document.getElementById(“模块”);
//写什么
var functionPlug=printNum;
//如何写作
函数平方(根){返回根*根;}
函数printNum(input){return input*input/input;}
//写
函数promptFunction(){element.innerHTML=functionPlug(window.prompt('inputvar'));}
//什么时候写
元素。addEventListener('click',promptFunction);
//提示功能()--立即
正文{
背景色:#3A3C3D;/*alt color#CCA#3A3C3D*/
保证金:0;
溢出:隐藏;/*顶部阻止扩展阴影元素高度导致页面滚动*/
}
.背景{
背景色:#FFF;/*alt colors#ACA null#CCA*/
保证金:自动;
高度:100vh;宽度:720px;
}
.背景:之前{
盒影:0 20px黑色;
内容:'';
位置:绝对位置;
高度:200vh;宽度:720px;
保证金:自动;
z指数:-1;
}
.换行符{
高度:16px;
}
.模块{
左边框:2个点红色;
边界半径:5px;
盒影:0.5px-2pxRGBA(0,0,0,4);
保证金:自动;
高度:270px;宽度:480px;
}

您的文本显示
printNum(input){return input;}
,但在原始代码中,有
函数printNum(input){return input*input/input;}
。这很重要

问题 所以基本上,您的问题可以归结为javascript为什么会这样做:

99999999 * 99999999 / 99999999 == 99999998.99999999
999999999999 * 999999999999 / 999999999999 == 99999999999.00002
9999999999999999 == 10000000000000000
顺便说一句,第二个(带有9999999999)在我的Chrome中不正确

答案 许多编程语言明确区分整数和浮点数(因为CPU也这样做)。JavaScript没有。它有一个
Number
类型,实际上是一个双精度浮点(
double
在C中),但只要可能,它看起来就像一个整数

浮点数可以显示比整数大得多的数字,也可以有小数,但它以丢失精度为代价,特别是对于大数字

你会想知道有多大。您可以检查
Number.MAX\u SAFE\u INTEGER
。对于大于该值的数字,不能保证它们具有整数的精度

例如:

Number.MAX_SAFE_INTEGER == 9007199254740991
Number.MAX_SAFE_INTEGER + 1 == 9007199254740992
Number.MAX_SAFE_INTEGER + 2 == 9007199254740992
Number.MAX_SAFE_INTEGER + 1 == Number.MAX_SAFE_INTEGER + 2
在您的情况下,您会遇到问题,因为:

99999999 * 99999999 > Number.MAX_SAFE_INTEGER
9999999999999999 > Number.MAX_SAFE_INTEGER
更多 如果您仍然不明白浮点数为什么会出现问题,请参阅以下内容:


您的数字听起来不对,任何介于2^53-1和负整数之间的整数都应该被视为安全整数,也就是说,它们不使用浮点。看见返回的是什么?你应该给出一个简单的例子来说明你调用的是什么,你有太多与问题无关的代码,我通过阅读你的答案意识到,我可能无法问我需要问的实际问题,如果有,就不太可能在stackoverflow上的帖子中得到回答。但你成功地向我介绍了许多新概念,我怀疑我自己是否有时间去阅读这些新概念,你也暴露了一些关于语言的批判性知识,这样就解决了我的问题。谢谢。@Musixauce3000我很高兴它能帮上忙:)顺便说一句,我想人们在有编程问题的时候,他们的主要麻烦是弄清楚该问什么。在那之后,答案很简单。