JavaScript中数值

Posted 简单的小伙子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript中数值相关的知识,希望对你有一定的参考价值。

javascript中数值:

JavaScript 语言的底层根本没有整数,所有数字都是小数(64位浮点数)。容易造成混淆的是,某些运算只有整数才能完成,此时 JavaScript 会自动把64位浮点数,转成32位整数,然后再进行运算,参见《运算符》一章的“位运算”部分。

由于浮点数不是精确的值,所以涉及小数的比较和运算要特别小心。

0.1 + 0.2 === 0.3
// false

0.3 / 0.1
// 2.9999999999999996
1 === 1.0 // true
(0.3 - 0.2) === (0.2 - 0.1)
// false
/
Math.pow(2, 53)
// 9007199254740992

Math.pow(2, 53) + 1
// 9007199254740992

Math.pow(2, 53) + 2
// 9007199254740994

Math.pow(2, 53) + 3
// 9007199254740996

Math.pow(2, 53) + 4
// 9007199254740996

大于2的53次方以后,整数运算的结果开始出现错误。所以,大于2的53次方的数值,都无法保持精度。由于2的53次方是一个16位的十进制数值,所以简单的法则就是,JavaScript 对15位的十进制数都可以精确处理。

javaScript中,数值可以使用科学计数法的表示方法,

123e3 // 123000
123e-3 // 0.123
-3.1E+12
.1e-23

3、数值的进制:

  • 十进制:没有前导0的数值。
  • 八进制:有前缀0o0O的数值,或者有前导0、且只用到0-7的八个阿拉伯数字的数值。
  • 十六进制:有前缀0x0X的数值。
  • 二进制:有前缀0b0B的数值。

特殊值:

​ 正零和负零:

javascript内部实际上存在2个0:一个是+0,一个是-0,区别就是64位浮点数表示法的符号位不同。它们是等价的。

-0 === +0 // true
0 === -0 // true
0 === +0 // true
//几乎所有场合,正零和负零都会被当作正常的0。
+0 // 0
-0 // 0
(-0).toString() // '0'
(+0).toString() // '0'
//唯一有区别的场合是,+0或-0当作分母,返回的值是不相等的。
(1 / +0) === (1 / -0) // false
//上面的代码之所以出现这样结果,是因为除以正零得到+Infinity,除以负零得到-Infinity,这两者是不相等的

NaN

1、(含义) 是JavaScript中的特殊值,表示“非数值”(Not a Number),主要出现在将字符串解析成数字出错的场合。

5 - 'x' // NaN
//  一些数学函数的运算结果会出现NaN
Math.acos(2) // NaN
Math.log(-1) // NaN
Math.sqrt(-1) // NaN
//0除以0也会得到NaN。
0 / 0 // NaN
//需要注意的是,NaN不是独立的数据类型,而是一个特殊数值,它的数据类型依然属于Number,使用typeof运算符可以看得很清楚
typeof NaN // 'number'

2、运算规则

NaN不等于任何值,包括它的本身。数组的indexOf方法内部使用的是严格相等运算符,所以该方法对NaN不成立。NaN在布尔运算时被当作falseNaN与任何数(包括它自己)的运算,得到的都是NaN

NaN === NaN // false
[NaN].indexOf(NaN) // -1
Boolean(NaN) // false    可以根据对象进行输出,好像是直接强制转换类型的意思,直接是在数据类型中可以进行输出。转换数据类型。
NaN + 32 // NaN
NaN - 32 // NaN
NaN * 32 // NaN
NaN / 32 // NaN

Infinity

1、含义,表示“无穷”用来表示两种场景。一种是一个正的数值太大,或一个负的数值太小,无法表示;另一种是非0数值除以0,得到InfinityInfinity有正负之分,Infinity表示正的无穷,-Infinity表示负的无穷

Infinity === -Infinity // false

1 / -0 // -Infinity
-1 / -0 // Infinity

Infinity大于一切数值(除了NaN),-Infinity小于一切数值(除了NaN

InfinityNaN比较,总是返回false

运算规则

Infinity的四则运算,符合无穷的数学计算规则。

5 / Infinity // 0
0 * Infinity // NaN
0 / Infinity // 0
Infinity / 0 // Infinity

Infinity加上或乘以Infinity,返回的还是Infinity

Infinity`减去或除以`Infinity`,得到`NaN
Infinity`与`undefined`计算,返回的都是`NaN

与数值相关的全局方法:

parselnt()

(1),基本用法,用于将字符串转为整数。

parseInt('123') // 123
//如果字符串头部有空格,空格会被自动去除。
parseInt('   81') // 81
//如果parseInt的参数不是字符串,则会先转为字符串再转换。
parseInt(1.23) // 1
// 等同于
parseInt('1.23') // 1
//字符串转为整数的时候,是一个个字符依次转换,如果遇到不能转为数字的字符,就不再进行下去,返回已经转好的部分。
parseInt('8a') // 8
parseInt('12**') // 12
parseInt('12.34') // 12
parseInt('15e2') // 15
parseInt('15px') // 15
// 上面代码中,parseInt的参数都是字符串,结果只返回字符串头部可以转为数字的部分。
//如果字符串的第一个字符不能转化为数字(后面跟着数字的正负号除外),返回NaN。
parseInt('abc') // NaN
parseInt('.3') // NaN
parseInt('') // NaN
parseInt('+') // NaN
parseInt('+1') // 1

parseInt方法还可以接受第二个参数(2到36之间),表示被解析的值的进制,返回该值对应的十进制数。默认情况下,parseInt的第二个参数为10,即默认是十进制转十进制

parseInt('1000', 2) // 8
parseInt('1000', 6) // 216
parseInt('1000', 8) // 512

上面代码中,二进制、六进制、八进制的1000,分别等于十进制的8、216和512。这意味着,可以用parseInt方法进行进制的转换。,

parseFloat() 方法用于将一个字符串转为浮点数

isNaN() 方法可以用来判断一个值是否为NaN

isNaN(NaN) // true
isNaN(123) // false

isFinite() 方法返回一个布尔值,表示某个值是否为正常的数值

isFinite(Infinity) // false
isFinite(-Infinity) // false
isFinite(NaN) // false
isFinite(undefined) // false
isFinite(null) // true
isFinite(-1) // true

以上是关于JavaScript中数值的主要内容,如果未能解决你的问题,请参考以下文章

剑指Offer打卡16. 数值的整数次方

c语言中数值前导是啥

16数值的整数次方

JavaScript基础之数值计算

12 数值的整数次方

求数值的整数次方