JS——让人哭笑不得的数据计算

 JS——让人哭笑不得的数据计算

 js只有一种数值类的数据类型,其内部构造是64位的浮点数,相当于java中的double型。也就是说使用 64 位(8字节) 来存储一个浮点数。 其可以表示的数字的绝对值范围大约是:1.7x10-308 ~ 1.7x10308IEEE754为其定制标准。和js不同的是,java有5中整数类型和2种浮点数类型。js之所以只支持一种数值类型,是由于设计当初更多的是着眼于降低编程难度,而非提升运行效率。如果有多种的数值类型,就不得不考虑赋值时是否会产生错误。而js数值只有一种,除了部分特殊情况,通常不会发生类型转换错误,但是从另一方面来说,由于数值类型能够与其他类型进行隐式转换,所以仍然存在着大量的陷阱。不过在实际的编程中,使用正整数的情况会更多,但是js的数值都是浮点小数,所以其运行效率会多少有些下降,因此对于比较重视运行效率的程序来说,js可能并不是合适的选择。
浮点数的常见注意事项:浮点数有时候并不能正确的表达小数点以后的部分。因为大部分情况下浮点数只能表达数值的近似值。比如:

 

0.1 + 0.2 ==0.3;
//false
10/3 - 3 == 1/3;
//false

对于浮点数来说,要执行正确的实数运算是不可能的,因为这不是个因该如何避免的问题,而是原理上就无法回避的问题。对于整数的情况,可以保证在53位的范围内能有正确的结果。如果想得到数值正确的实数,就必须使用类似于java中的BigDecimal类的实数库了。目前,js并没有标准的实数库。我见过处理浮点数最好的建议是使用库,像sinfuljs或mathjs。mathjs比较不错(但实际上,任何和数学相关的我甚至不会使用JavaScript去做)。当需要任意精度数学计算的时候,BigDecimal也是非常有用的。由于二进制表示的固有缺陷,以及有限的机器空间,我们不得不面对一个充满舍入误差的规范。记住使用一个很棒的库而不是自己去做一切。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值