数字(Number)也称为数值或数。

数值直接量

当数字直接出现在程序中时,被称为数值直接量。在 JavaScript 程序中,直接输入的任何数字都被视为数值直接量。

示例1

数值直接量可以细分为整型直接量和浮点型直接量。浮点数就是带有小数点的数值,而整数是不带小数点的数值。

var int = 1;  //整型数值
var float = 1.0; //浮点型数值

整数一般都是 32 位数值,而浮点数一般都是 64 位数值。

JavaScript 中的所有数字都是以 64 位浮点数形式存储,包括整数。例如,2 与 2.0 是同一个数。

示例2

浮点数可以使用科学计数法来表示。

var float = 1.2e3;

其中 e (或 E)表示底数,其值为 10,而 e 后面跟随的是 10 的指数。指数是一个整型数值,可以取正负值。上述代码等价于:

var float = 1.2*10*10*10;
var float = 1200;

示例3

科学计数法表示的浮点数也可以转换为普通的浮点数。

var float = 1.2e-3;

等价于:

var float = 0.0012;

但不等于:

var float = 1.2*1/10*1/10*1/10;  //返回 0.0012000000000000001
var float = 1.2/10/10/10; //返回 0.0012000000000000001

浮点数溢出

执行数值计算时,要防止浮点数溢出。例如,0.1+0.2 并不等于 0.3。

num = 0.1+0.2;  //0.30000000000000004

这是因为 JavaScript 遵循二进制浮点数算术标准(IEEE 754)而导致的问题。这个标准适合很多应用,但它违背了数字基本常识。

解决方法:浮点数中的整数运算是精确的,所以小数表现出来的问题可以通过指定精度来避免。例如,针对上面的相加可以这样进行处理。

a = (1+2)/10;  //0.3

这种处理经常在货币计算中用到。例如,元可以通过乘以 100 而转成分,然后就可以准确地将每项相加,求和后的结果可以除以 100 再转换回元。

特殊数值

JavaScript 定义了几个特殊的数值常量,说明如表所示。

特殊值 说明
Infinity 无穷大。当数值超过浮点型所能够表示的范围;反之,负无穷大为-Infinity
NaN 非数值。不等于任何数值,包括自己。如当0除以0时会返回这个特殊值
Number.MAX_VALUE 表示最大数值
Number.MIN_VALUE 表示最小数值,一个接近0的值
Number.NaN 非数值,与NaN常量相同
Number.POSITIVE_INFINITY 表示正无穷大的数值
Number.NEGATIVE_INFINITY 表示负无穷大的数值

NaN

NaN(Not a Number,非数字值)是在 IEEE 754 中定义的一个特殊的数值。

typeof NaN === 'number '  //true

当试图将非数字形式的字符串转换为数字时,就会生成 NaN。

+ '0' //0
+ 'oops' //NaN

当 NaN 参与数学运算时,运算结果也是 NaN。因此,如果表达式的运算值为 NaN,那么可以推断其中至少一个运算数是 NaN。

typeof 不能分辨数字和 NaN,并且 NaN 不等同于它自己。

NaN === NaN //false
NaN !== NaN //true

使用 isNaN() 全局函数可以判断 NaN。

isNaN(NaN) //true
isNaN(0) //false
isNaN('oops') //true
isNaN('0') //false

使用 isFinite() 全局函数可以判断 NaN 和 Infinity。因此,可以使用它来检测 NaN、正负无穷大。如果是有限数值,或者可以转换为有限数值,那么将返回 true。如果只是 NaN、正负无穷大的数值,则返回 false 。

示例

isFinite() 会试图把检测到的值转换为一个数字。如果值不是一个数字,那么使用 isFinite() 直接检测就不是有效的方法。通过自定义 isNumber 函数可以避免 isFinite() 的缺陷。下面自定义函数先判断值是否为数值类型,如果是数值类型,再使用 isFinite() 过滤出有效数字。

var isNumber = function isNumber(value){
return typeof value === 'number' && isFinite(value);
}

数值运算

使用算数运算符,数值可以参与各种计算,如加、减、乘、除等运算操作。

示例1

为了解决复杂数学运算,JavaScript 提供了大量的数值运算函数,这些函数作为 Math 对象的方法可以直接调用。

var a = Math.floor(20.5);  //调用数学函数,向下舍入
var b = Math.round(20.5); //调用数学函数,四舍五入
document.write(a); //返回20
document.write(b); //返回21

示例2

toString() 方法可以根据所传递的参数把数值转换为对应进制的数字字符串。参数范围为 2~36 之间的任意整数。

var a = 32;
document.writeln(a.toString(2)); //返回字符串100000
document.writeln(a.toString(4)); //返回字符串200
document.writeln(a.toString(16)); //返回字符串20
document.writeln(a.toString(30)); //返回字符串12
document.writeln(a.toString(32)); //返回字符串10

数值直接量不能直接调用 toString() 方法,必须先使用小括号或其他方法强制把数字转换为对象。

document.writeln(32.toString(16));  //抛出语法错误document.writeln((32).toString(16));   //返回20

JavaScript 数字的更多相关文章

  1. javascript数字验证输入

    javascript数字验证功能: <html> <body> <p>请输入数字.如果输入值不是数字,浏览器会弹出提示框.</p> <input ...

  2. javascript 数字格式化

    对数字进行格式化输出,是非常有意义的一件事情,例如许多时候,我们希望一个数字能够输出为指定格式的字符串,拿25.9878来说,我们可能会希望它能保留两位小数来说出,即结果为25.99,或者对于0.34 ...

  3. JavaScript数字精度丢失问题总结

    本文分为三个部分 JS 数字精度丢失的一些典型问题 JS 数字精度丢失的原因 解决方案(一个对象+一个函数) 一.JS数字精度丢失的一些典型问题 1. 两个简单的浮点数相加 0.1 + 0.2 != ...

  4. JavaScript数字精度上代码。

    /**不能超过 9007199254740992 * floatObj 包含加减乘除四个方法,能确保浮点数运算不丢失精度 * * 我们知道计算机编程语言里浮点数计算会存在精度丢失问题(或称舍入误差), ...

  5. JavaScript数字和字符串转换示例

    http://www.jb51.net/article/48465.htm 1. 数字转换为字符串 a. 要把一个数字转换为字符串,只要给它添加一个空的字符串即可: 复制代码代码如下: var n = ...

  6. JavaScript 数字字符串比较大小

    JavaScript中常用数字字符串比较 1.数字与数字之间直接比较 比较方式依据数学运算,没什么好说的. 2.数字与字符串数字之间直接比较 例如 数字5 与字符串数字'123',这种比较先将数字字符 ...

  7. javascript数字格式化通用类——accounting.js使用

    简介 accounting.js 是一个非常小的JavaScript方法库用于对数字,金额和货币进行格式化.并提供可选的Excel风格列渲染.它没有依赖任何JS框架.货币符号等可以按需求进行定制. 代 ...

  8. JavaScript 数字滚动countup.js

    1. 概述 1.1 说明 在项目过程中,有时候需要动态的去展示一些数据的加载状态,如一个数字为10000,需要5秒时间滚动加载完成.此时使用countup.js就能够很方便的处理此类功能问题. 1.2 ...

  9. 5个缺失的 JavaScript 数字格式化函数

    /** 下面两个函数都能对浮点数进行四舍五入,保留小数点后两位 **/ function CurrencyFormatted(amount) { var i = parseFloat(amount); ...

随机推荐

  1. Mac 配置cron

    请参考:https://www.cnblogs.com/EasonJim/p/7819635.html 查看 crontab 是否启动 sudo launchctl list | grep cron ...

  2. 设备驱动基础学习--misc device简单实现

    在Linux驱动中把无法归类的五花八门的设备定义为混杂设备(用miscdevice结构体表述).miscdevice共享一个主设备号MISC_MAJOR(即10),但次设备号不同. 所有的miscde ...

  3. 每天进步一点点------SOPC的Avalon-MM IP核(二) AVALON总线的IP核定制

    简介 NIOS II是一个建立在FPGA上的嵌入式软核处理器,除了可以根据需要任意添加已经提供的外设外,用户还可以通过定制用户逻辑外设和定制用户指令来实现各种应用要求.这节我们就来研究如何定制基于Av ...

  4. webRTC中回声消除(AEC)模块编译时aec_rdft.c文件报错:

    webRTC中回声消除(AEC)模块编译时aec_rdft.c文件报错. 原因是: 局部变量ip跟全局变量冲突的问题,可以将局部变量重新命名一下,就可以通过编译了. aec_rdft.c修改以后文件代 ...

  5. 如何让后加载的元素被一开始就有的css样式渲染成功(强制提升css优先级)

    今天在做搜索框中的提示语下拉的时候,提示框把搜索框的底部的border遮住,导致看起来不是很美观: 因为下方的提示框是用js后加载的它的样式也是随着js一起加载的,而这个js和它的css我们是不能改动 ...

  6. 吴裕雄 python 神经网络TensorFlow实现LeNet模型处理手写数字识别MNIST数据集

    import tensorflow as tf tf.reset_default_graph() # 配置神经网络的参数 INPUT_NODE = 784 OUTPUT_NODE = 10 IMAGE ...

  7. 第八届极客大挑战 Web-iPhone X

    题目: 解题思路: 第一次看到html里只有字其他啥也没有的题,一脸懵逼,学长提示抓包改包,于是开始我的苦逼解题. 0x01 抓包 0x02 改包 由于题目说只有iphoneX才能接受这个websit ...

  8. How to Start Learning Computer Graphics

    Background Input\Output Image Knowledge Image Digital Image Processing Computer Vision Knowledge Com ...

  9. (Java多线程系列九)线程池

    线程池 1.什么是线程池 线程池是指在初始化一个多线程应用程序过程中创建一个线程集合,然后在需要执行新的任务时重用这些线程而不是新建一个线程.线程池中线程的数量通常取决于可用内存数量和应用程序的需求. ...

  10. 矩阵matrix

    矩阵matrix 1. 矩阵matrix 1.1. 定义由 m × n 个数aij排成的m行n列的数表称为m行n列的矩阵,简称m × n矩阵.记作: 这m×n 个数称为矩阵A的元素,简称为元,数aij ...