JavaScript数据结构Number

 更新时间:2022年02月18日 11:24:30   作者:天行无忌  
这篇文章主要介绍了JavaScript数据结构Number,Number 是JavaScript的基本数据结构,是对应数值的应用类型,下文给大家分享JavaScript使用 Number 的常见问题,需要的朋友可以参考一下

前言:

NumberJavaScript的基本数据结构,是对应数值的应用类型。要创建一个 Number 对象,就使用 Number 构造函数并传入一个数值。在 JavaScript 中没有其他语言这么多的数字类型。根据 ECMAScript 标准,数字只有一种类型,它是“双精度 64 位二进制格式 IEEE 754 值”。这种类型用于存储整数和分数,相当于 Java 和 C 中的 double 数据类型。这个独特性也就导致了 0.1+0.2 为什么不等于 0.3。本文介绍JavaScript使用 Number 的常见问题。

先来看下下面的代码:

console.log(0.1 + 0.2); // 0.30000000000000004

从上面运行结果可以看出 0.1+0.2 不等于 0.3。只有分母为 2 的幂的分数才能有限地表示为二进制形式. 由于 0.1 (1 / 10) 和 0.2 (1 / 5) 的分母不是 2 的幂,因此这些数字不能以二进制格式有限地表示。为了将它们存储为 IEEE-754 浮点数,它们必须四舍五入到尾数的可用位数——半精度为 10 位,单精度为 23 位,双精度为 52 位。根据可用的精度位数,0.1 和 0.2 的浮点近似值可能比相应的十进制表示略小或略大,但永远不会相等。因为这个事实,永远不会有 0.1+0.2 == 0.3。

一、NaN和Infinity

NaN 代表Not a Number 并且它不同于 Infinity,尽管两者通常在实数的浮点表示以及浮点运算中都作为特殊情况处理。NaN 是一个特殊的值,它是唯一一个不等于自身的值,来看看下面的代码理解一个这个值:

const num = 9 + NaN;
console.log(num); // NaN
console.log(NaN == NaN); // false
console.log(NaN === NaN); // false
console.log(Object.is(NaN, NaN)); // true
console.log(isNaN(NaN)); // true
console.log(isNaN("devpoint")); // true
console.log(Number.isNaN(NaN)); // true
console.log(Number.isNaN("devpoint")); // false
console.log(Number.isNaN(+"devpoint")); // true

Infinity 是 JavaScript 中的一个特殊值,表示数学无穷大和溢出值,数字太大以至于“溢出”缓冲区并导致 Infinity。它是计算创建超出 JavaScript 中特殊最大值的数字的结果,该值约为1.79e+308 或 2¹⁰²⁴,即 JavaScript 中可以存储为数字原始类型的最大值。

注意 :Infinity,-Infinity 和 NaN 是 JavaScript 中唯一的“无限”(非有限)数字。

二、常用方法

在程序中处理数字是一个常见的需求,例如序号、费用、温度等等。下面通过代码展示一些常用的与 Number 有关的方法。

1.安全数字

安全数字是一个数字,其值保证可以正常显示。例如,如果有一个变量值为 900719925474099194 ,那么它是否安全?

下面来看 JavaScript 中安全数字的范围是多少?如何验证?

  • Number.MIN_SAFE_INTEGER:-9007199254740991
  • Number.MAX_SAFE_INTEGER:9007199254740991
  • Number.MAX_VALUE:1.7976931348623157e+308
  • Number.MIN_VALUE:`5e-324
const test = 900719925474099194;
console.log(Number.isSafeInteger(test)); // false
console.log(Number.isSafeInteger(9007199254740991)); // true

2.整数判断

JavaScript 中对于数字不区分整数、小数等类型,统称为 Number 类型。从下面的代码结果可以想到判断整数的方法:

console.log(Number.isInteger(9)); // true
console.log(Number.isInteger(9 / 2)); // false
console.log(Number.isInteger(9.6)); // false
console.log(9 % 1 === 0); // true
console.log(9.1 % 1 === 0); // false
const checkInteger = (num) => (num | 0) === num;
console.log(checkInteger(9)); // true
console.log(checkInteger(9.1)); // false
console.log(checkInteger("9.0")); // false
console.log(checkInteger("")); // false

3.数字格式判断

下面的代码片段将展示如何检查一个值或变量是否包含一个数字(整数、浮点数等)。

function isNumber(n) {
    return !isNaN(parseFloat(n)) && isFinite(n);
}
console.log(isNumber(100)); // true
console.log(isNumber(3.14)); // true
console.log(isNumber("3.14")); // true
console.log(isNumber("a3.14")); // false
console.log(isNumber("JavaScript")); // false

4.四舍五入

JavaScript 中,对数值进行四舍五入操作有很多的方式,下面来一一总结一下。

向上取整:

向上取整使用 Math.ceil(),返回大于或等于 x ,并且与之最接近的整数。

console.log(Math.ceil(9.005)); // 10
console.log(Math.ceil(9.999)); // 10

四舍五入:

Math.round() 是对一个浮点数进行四舍五入,并保留整数位。语法如下:

Math.round(x)

x :需要处理的数值

返回值,返回给定数字的四舍五入后的值。

console.log(Math.round(9.005)); // 9
console.log(Math.round(9.51)); // 10
console.log(Math.round(9.49)); // 9
console.log(Math.round(9.999)); // 10

固定精度:

.toFixed()Number 原型上实现的一个方法,其作用是对一个浮点数进行四舍五入并保留固定小数位。语法如下:

numObj.toFixed(digits)

digits:小数点后数字的个数;介于 0 到 20 (包括)之间,实现环境可能支持更大范围。如果忽略该参数,则默认为 0。
返回值,返回使用定点表示法表示给定数字的字符串。

const pi = 3.14159265359;
console.log(pi.toFixed(2)); // 3.14
console.log(pi.toFixed(3)); // 3.142

固定长度:

.toPrecison() 也是 Number 原型上实现的一个处理浮点数的方法,和 toFixed 不同的是,它是对一个浮点数进行四舍五入并保留固定长度的有效数字,包括整数部分。语法如下:

numObj.toPrecision(precision)

precision:可选,一个用来指定有效数个数的整数。
返回值,以定点表示法或指数表示法表示的一个数值对象的字符串表示,四舍五入到 precision 参数指定的显示数字位数。

const pi = 3.14159265359;
console.log(pi.toPrecision(3)); // 3.14
console.log(pi.toPrecision(4)); // 3.142

向下取整:

Math.floor() 返回小于或等于一个给定数字的最大整数。

Math.floor(x)

x:一个数字。

返回值,一个表示小于或等于指定数字的最大整数的数字。

console.log(Math.floor(9.005)); // 9
console.log(Math.floor(9.51)); // 9
console.log(Math.floor(9.49)); // 9
console.log(Math.floor(9.999)); // 9

5.生成随机数

通过Math.random() 返回 0-1 之间的随机数的原理,结果乘以最大数并四舍五入即可获得一个介于 0 和 max 之间的数字。

const randomNumber = (max) => Math.round(Math.random() * max);
console.log(randomNumber(100));

进一步完善上面的方法以可以获取指定最小和最大范围的随机数。

const randomNumber = (min, max) =>
    Math.round(Math.random() * (max - min) + min);
    console.log(randomNumber(51, 100));

数学函数 Math 是一个内置对象,它拥有一些数学常数属性和数学函数方法,Math 不是一个函数对象,Math 用于 Number 类型,但它不支持 BigInt。

三、总结

JavaScriptNumber 对象是经过封装的能让你处理数字值的对象。介绍了JavaScript 中唯一的“无限”(非有限)数子:Infinity,-Infinity 和 NaN ,并提供了一些常用的数字处理方法。

到此这篇关于JavaScript数据结构Number的文章就介绍到这了,更多相关JavaScript-Number内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • uni-app 中清除定时器实现方法详解

    uni-app 中清除定时器实现方法详解

    这篇文章主要为大家介绍了uni-app 中清除定时器实现方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • javascript实现京东快递单号的查询效果

    javascript实现京东快递单号的查询效果

    这篇文章主要为大家详细介绍了javascript实现京东快递单号的查询效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • 快速排序 php与javascript的不同之处

    快速排序 php与javascript的不同之处

    告诉你一个排序算法,也许是最重要的是他们知道 - 快速排序,无论是在PHP和JavaScript实现的。虽然这两种语言之间的代码看起来相似,也有一些差异,这表明了语法知识的重要性!
    2011-02-02
  • js行号显示的文本框实现效果(兼容多种浏览器 )

    js行号显示的文本框实现效果(兼容多种浏览器 )

    本文主要介绍了javascript实现行号显示的文本框效果,这样就可以解决读者很难迅速找到所在某一行的对应代码,感兴趣的小伙伴们可以参考一下
    2015-10-10
  • 基于zepto.js实现手机相册功能

    基于zepto.js实现手机相册功能

    这篇文章主要为大家详细介绍了基于zepto.js实现手机相册功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • JavaScript实现电灯开关小案例

    JavaScript实现电灯开关小案例

    这篇文章主要为大家详细介绍了JavaScript实现电灯开关小案例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • JavaScript基础篇(3)之Object、Function等引用类型

    JavaScript基础篇(3)之Object、Function等引用类型

    这篇文章主要介绍了JavaScript基础篇(3)之Object、Function等引用类型的相关资料,需要的朋友可以参考下
    2015-11-11
  • JavaScript监听键盘事件代码实现

    JavaScript监听键盘事件代码实现

    这篇文章主要介绍了JavaScript监听键盘事件代码实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • js多个物体运动功能实例分析

    js多个物体运动功能实例分析

    这篇文章主要介绍了js多个物体运动功能,结合实例形式分析了js实现多物体运动功能的原理、实现技巧与相关注意事项,需要的朋友可以参考下
    2016-12-12
  • 10个基于浏览器的JavaScript调试工具分享

    10个基于浏览器的JavaScript调试工具分享

    调试Javascript可能是web开发中最让人郁闷的事情,这里是10款我们精选的基于浏览器的JS在线调试工具,感兴趣的朋友可以参考下,或许对你有所帮助
    2013-02-02

最新评论