位置:海鸟网 > IT > JavaScript >

javascript下的数值型比较真的没有那么简单

下面两个小问题是楼猪在实际项目开发中遇到的,贴上来和大家讨论下。
1、数字长长的,在c#里合法的长整型数字在下竟然......
看下面几行简单代码:

您可以拷贝代码自己在本地测试一下。实际运行的结果是,a和b竟然相等,弹出的是“true”。反正楼猪第一次碰到这种情况的时候感到一丝意外。然后楼猪分别让两个数字弹出,这次又意外发现数字改变成了“”。最后又测试了一下和数字相关的Number,parseInt和parseFloat函数,三个结果依旧是true。
然后楼猪把数字型调整成字符串类型,如下:

这次预料中的前三个都没有问题,可是转换成数值型的比较依旧返回true。
是不是这里测试的两个数字都不在javascript的数字限定范围内呢?可是为什么弹出的数字改变成了“”(百位数字太诡异了)?
自己google无果后,采用了下面的函数比较两个长整型的数字大小:

 2、带个小数点的,parseInt的取舍
这个问题有的javascript书上已经讲过。看下面的代码:

您可能已经知道了。parseInt(b)返回的竟然是

这一次,

哈哈,这次楼猪似乎接近发现真相了。b在Number和parseFloat之后,都弹出1e-7,科学计数法嘛。看来还真的是八进制的问题。然后nc楼猪想当然地以为只要先将要parseInt的数字先toString或者String一下问题就可以解决了:

 晕啊,这次怎么还是1呢?改成下面的还是一样的:

那么,对于这种八进制parseInt返回科学计数法的数字,我们怎么取整呢?按照开发需要,Math里有函数可以帮我们轻松实现功能的:

至于javascript常用的Math函数的floor和ceil方法的区别,您可以参考相关文档,这里不赘述。最后,期待您的宝贵意见和建议。