当前位置: 首页 > 编程笔记 >

JavaScript中的数值范围介绍

彭鸿畅
2023-03-14
本文向大家介绍JavaScript中的数值范围介绍,包括了JavaScript中的数值范围介绍的使用技巧和注意事项,需要的朋友参考一下

JavaScript中所有的数字,无论是整数还是小数,其类型均为Number。在程序内部,Number类型的实质是一个64位的浮点数,这与Java中double类型的浮点数是一致的;因此,JavaScript中所有的数都是浮点数。遵循IEEE 754标准(浮点数算术标准),JavaScript所能表示的数值范围为正负1.7976931348623157乘以10的308次方,其最小所能表示的小数为正负5乘以10的负324次方,这两个边界值可以分别通过访问Number对象的MAX_VALUE属性和MIN_VALUE属性来获取。

对于整数,根据ECMAScript标准的要求(http://ecma262-5.com/ELS5_HTML.htm#Section_8.5),JavaScript能表示并进行精确算术运算的整数范围为:正负2的53次方,也即从最小值-9007199254740992到最大值+9007199254740992之间的范围;对于超过这个范围的整数,JavaScript依旧可以进行运算,但却不保证运算结果的精度。值得注意的是,对于整数的位运算(比如移位等操作),JavaScript仅支持32位整型数,也即从-2147483648到+2147483647之间的整数。

实验

显示JavaScript的最大数的绝对值、最小小数的绝对值:


console.log(Number.MAX_VALUE);

console.log(Number.MIN_VALUE);


显示结果为1.7976931348623157e+308和5e-324。

对正负2的53次方范围以外的整数,JavaScript无法给出精确的计算结果:


var a = 9007199254740992;

console.log(a+3);


正确的运算结果应该是9007199254740995,但JavaScript给出的计算结果却是9007199254740996。尝试改变计算公式后可以发现,只要整数大于9007199254740992,这种计算结果的错误将频繁出现。如果说计算精度的偏差尚可接受的话,那么下面这个例子的后果就更严重了:



var MAX_INT = 9007199254740992;

for (var i = MAX_INT; i < MAX_INT + 2; ++i) {

  // infinite loop

}


由于计算精度问题,上面的for语句将陷入死循环。

对于位运算,JavaScript仅支持32位整型数:



var smallInt = 256;

var bigInt = 2200000000;

console.log(smallInt / 2);

console.log(smallInt >> 1);

console.log(bigInt / 2);

console.log(bigInt >> 1);


可以看到,对于32位以内的整数(256),JavaScript可以进行正确的位运算,所得结果与除法运算的结果一致(128)。而对于32位以外的整数,JavaScript可以进行正确的除法运算(1100000000),但进行位运算后所得结果却与正确结果相去甚远(-1047483648)。

 类似资料:
  • 这个函数返回ndarray对象,包含给定范围内的等间隔值。 构造器接受下列参数: 下面的例子展示了如何使用该函数: import numpy as np x = np.arange(5) print x 输出如下: 示例 2 import numpy as np # 设置了 dtype x = np.arange(5, dtype = float) print x 输出如下: [0. 1.

  • 问题内容: 我已经阅读过Java的作用域链,但对我来说却没有任何意义,有人可以告诉我什么是作用域链,以及作用域与图形或什至是白痴都能理解的方式。我用谷歌搜索,但没有找到可理解的东西:( 问题答案: 要了解作用域链,您必须知道闭包是如何工作的。 当您嵌套函数时,会形成一个闭包,内部函数即使在其父函数已经执行后,也可以引用其外部封装函数中存在的变量。 JavaScript通过遍历范围链(从本地到全局)

  • 问题内容: 我想通过使用以下代码来获取全局变量中的数据: 但是问题是我只是在d3.json函数中定义了数据变量,但是没有定义。我该如何解决这个问题? 谢谢 问题答案: 由于d3请求(如)是异步的,因此最佳做法是将所有依赖于外部请求的代码包装在请求回调中,以确保该代码在执行之前可以访问数据。来自D3 docs :“异步加载数据时,依赖于已加载数据的代码通常应存在于回调函数中。” 因此,一种选择是将所

  • 问题内容: 我想做这样的事情 正确的语法是什么?JavaScript可能吗? 所以是一个整数,如果它在这些值之间,请执行某些操作。 问题答案: 这是我想出的另一种方法:

  • 可以从ndarray中选择非元组序列,整数或布尔数据类型的ndarray对象,或者至少有一个项目是序列对象的元组。 高级索引始终返回数据的副本。 与此相反,切片仅呈现视图。 高级索引有两种类型 - Integer和Boolean 。 整数索引 此机制有助于根据其N维索引选择数组中的任意项。 每个整数数组表示该维度的索引数。 当索引由与目标ndarray的维度一样多的整数数组组成时,它变得简单明了。

  • 可以通过索引或切片来访问和修改ndarray对象的内容,就像Python的内置容器对象一样。 如前所述,ndarray对象中的项遵循从零开始的索引。 有三种类型的索引方法可用 - field access, basic slicing和advanced indexing 。 基本切片是Python切片到n维的基本概念的扩展。 通过向内置slice函数提供start, stop和step参数来构造P