大多数的编程
语言有几个数字数据
类型,但只有一个Javascript,您可以使用typeof
运算符看到数字类型。无论是整数或浮点数,简单地将其分为数的Javascript。
Typeof 17; / /数量
类型98.6; / /数量
类型21.3; / /数量
事实上,在Javascript中所有的数
都是双精度浮点数字。这是64位编码的IEEE754标准就是了,双打。如果这使你不知道Javascript代表一个整数,记住一个双精度浮点数字可以代表一个53位的整数,整数从9007199254740992(253)9007199254740992(253)是有效的双精度浮点数字。因此,虽然是在Javascript中没有明显的整数类型,整数运算可以进行完全。
大多数算术运算符可以用整数、实数或二者的组合计算。
0.1 * 0.9 0.19;
- 99 + 100; / 1
21 - 12.3; / 8.7
2.5 5;0.5
21% 8; / 5
然而,位运算算子更special.javascript
操作不直接为一个浮点数,但将其隐含的32位整数。(实际上,它们
转换为32大端(big endian)2的补码整数表示。)带一点或表达为例:
8 | 1; / / 9
一个看似简单的表达实际上需要几个
步骤来完成操作。如前所述,数字8和1中的Javascript都是双精度的浮点数。但他们也可以表示为32位整数,即32位的0和1的序列,整数8表示为32位二进制序列如下:
0000000000000000000000000000 1000
你也可以使用数字类型的ToString
方法自己看:
(8),ToString(2) / 1000
toString方法的
参数指定的基数的转换,这是由2个基数为代表(或二进制)。结果值省略额外的0(位)在离开,因为他们不
影响最终的价值。
整数1表示为32位二进制
文件,如下所示:
0000000000000000000000000000000 1
两位序列由位或操作表达式合并,只要操作中所涉及的两位中的任何一位为1,结果的位为1:
0000000000000000000000000000 1001
这个序列代表一个整数9,你可以使用标准库
函数parseInt验证,以及2作为基数:
ParseInt(1000
(此外,前导0位是不必要的,因为它们不影响操作的结果。)
所有点运营商以同样的方式
工作。他们把操作数转换成整数,然后用整数数字
模式来进行操作,最后将结果为浮点标准的Javascript的数量。一般来说,Javascript引擎需要做一些额外的工作来做这些转变。自号存储在一个浮点数,它必须被转换成一个整数,然后转换为浮点数。然而,在某些
情况下,算术表达式和甚至变量只能参加运算的整数。编译器有时可以推断这些情况,并以整数方式内部存储数字,以避免不必要的转换。
关于浮点数的最后警告,你应该遵守times.floating-point数字似乎熟悉的警惕,但他们是不准确的。甚至一些算术操作似乎是最简单的产生不
正确的结果。
0.1 + 0.2;0.300000000000004
虽然64位的精度是相当高的,双精度浮点数只能代表一组有限的数字,但并不是所有的实数。浮点操作只能产生一个近似的结果,和四的RMS五到最近的房号。当你
执行一系列操作,结果将成为舍入误差的积累越来越不准确。圆也可以从算术运算规律我们通常期望做出一些意想不到的偏差。例如,实数满足结合律,这意味着对于任何实数x,y,z,总是满足(x + y)= X + Y + Z(+ Z)。
然而,对于浮点数,情况并非总是如此。
(0.1 + 0.2)+ 0.3; / 0.6000000000000000
0.1 +(0.2 + 0.3); / 0.6
浮点数重量的精度和
性能。当我们关心的是精度,我们应该对浮点数的限制,小心。一个有效的
解决方案是使用整数值的操作尽可能多的,因为整数不需要杀进时表示。当计算货币相关,
程序员通常值转换为最小的货币单位来表示计算一次,这样就可以计算出整数。例如,如果上面的计算是以美元计算,那么我们可以把它转换成一个整数表示的美分。
(10 + 20)+ 30; / 60
10 +(20 + 30); / 60
对于整数运算,您不必担心舍入
错误,但仍然要小心,所有的计算只适用于整数253 - 253。
提示 Javascript的数量是一个双精度浮点数。
Javascript中的整数只是双精度浮点数的一个子集,而不是单个数据类型。
位运算符将数字视为一个32位带符号整数。
以上是Javascript引入的浮点数。在浮点运算中,我们必须时刻注意精度陷阱。我希望这篇文章能帮助你
学习。