原帖地址:http://lifesinger.org/blog/2010/05/the-trap-of-parseint/
看代码:
alert(parseInt(0.000001)); alert(parseInt(0.0000001));
第一条语句输出 0, 第二条语句输出 1, 囧。
继续看代码:
alert(parseInt('0.000001')); alert(parseInt('0.0000001'));
都输出 0, 这才符合预期。
查看 ECMA-262 规范,parseInt 会先调用 toString 方法。问题已逐渐清晰:
alert(0.000001); alert(0.0000001);
第一条语句原样输出,第二条语句输出 1e-7.
继续翻查 ECMA-262 9.8.1 ToString Applied to the Number Type 一节,恍然大悟:
assertEquals("0.00001", (0.00001).toString()); assertEquals("0.000001", (0.000001).toString()); assertEquals("1e-7", (0.0000001).toString()); assertEquals("1.2e-7", (0.00000012).toString()); assertEquals("1.23e-7", (0.000000123).toString()); assertEquals("1e-8", (0.00000001).toString()); assertEquals("1.2e-8", (0.000000012).toString());
上面是 V8 引擎 number-tostring 的单元测试脚本 , 很好地诠释了 ECMA 规范。
小结:对于小于 1e-6 的数值来说,ToString 时会自动转换为科学计数法。 因此 parseInt 方法,在参数类型不确定时,最好封装一层:
function parseInt2(a) { if(typeof a === 'number') { return Math.floor(a); } return parseInt(a); }
相关推荐
本文将详细探讨parseInt函数的使用,以及它的陷阱,并给出解决方案。 首先,我们来理解parseInt函数的基本用法。parseInt接受两个参数:第一个是要转换的字符串,第二个是可选的基数(radix),用来指定字符串的...
在这个主题中,我们将深入探讨`parseInt()`的工作原理、常见问题以及如何避免这些陷阱。 `parseInt()`函数的基本用法是接收两个参数:要解析的字符串和可选的基数(radix)。基数指定了字符串表示数字的进制,范围...
本文旨在深入探讨`parseInt()`函数的工作原理、使用方法以及一些常见陷阱,并提供解决方案。 #### 二、基本语法 `parseInt()`函数的基本语法如下: ```javascript parseInt(string, radix); ``` - **string**:...
比如说parseInt(“010”,10)就是10进制的结果:10,parseInt(“010”,2)就是2进制的结果:2,parseInt(“010”,8)就是8进制的结果:8,parseInt(“010”,16)就是2进制的结果:16。 下面我来说说没有指定进制单位的...
转换类型(转换为数字)转换类型Number()、parseInt()、parseFloat的区别 在 JavaScript 中,转换类型是指将其他数据类型转换为数字类型的过程。其中,Number()、parseInt()、parseFloat() 是三个常用的转换类型...
本文将深入探讨`parseInt`函数的工作原理,并解释一些常见的陷阱及其解决方案。 #### 二、`parseInt`函数的基本用法 `parseInt`函数的基本语法如下: ```javascript parseInt(string, radix); ``` 其中: - `...
JavaScript中的`parseInt()`和`Number()`函数都是用来将非数字的字符串转换成数值类型,但它们之间存在一些关键的区别。本文将深入探讨这两个函数的工作原理和应用场景。 `parseInt()`函数主要用于将一个字符串解析...
### 前端面试中的map和parseInt函数分析能力 前端开发中,遇到需求或代码问题能够高效地进行分析与解决是前端程序员的核心技能之一。这份面试题文档主要考察了对`map`和`parseInt`函数的理解和应用,以及对...
`parseInt`函数是JavaScript中的一个关键函数,尤其在处理数字字符串时非常常见。在这个主题中,我们将深入探讨`parseInt`函数,以及它在前端面试中可能涉及的相关知识点。 `parseInt`函数用于将字符串转换为整数。...
今天测的时候发现问题了,当数据库中月份为09的时候就出问题了,用parseInt转换之后就成0了。好不解。测了好久,没有发现我代码中的问题,到google搜了一下,才知道是这么一回事。 对于parseInt(“01”)到parseInt...
我们经常用ParseInt函数转换字符串为int数值,ParseInt函数有两个参数可以设置,其中第二个参数可以缺省。 ParseInt(“字符串”,使用的进制) var num1=ParseInt(“10”,2)//2 var num1=ParseInt(“10”,8)//8 var ...
js parsefloat parseint JavaScript提供了3个显式的类型转换函数,分别是eval()、parseInt()和parseFloat()。 eval()函数:将字符串表达式转换成数字值。例如,语句total=eval(“432.1*10”)...
### JavaScript中的parseInt与Number函数的区别 #### 一、概述 在JavaScript编程中,开发者经常会遇到需要将字符串转换成数字的情况。对于这样的需求,JavaScript提供了多种方法来实现这一目标,其中最为常用的两...
### JavaScript `parseInt()` 函数的进制转换注意事项 #### 概述 `parseInt()` 是 JavaScript 中一个非常常用的方法,主要用于将字符串转换成整数。它接受两个参数:第一个参数是要转换的字符串,第二个参数则是该...
标题和描述中提到的“JS实现手写parseInt的方法示例”涉及到JavaScript编程领域中的一个重要函数parseInt。parseInt函数是JavaScript中的内置函数,用于将一个字符串转换为指定基数的整数。手写parseInt不仅有助于...
JavaScript中的parseInt函数是一个常用的函数,它用于将字符串转换为整数。但是,它在处理字符串时的行为可能会导致一些诡异的问题,特别是当涉及到前导零和不同进制的表示时。在这篇文章中,作者分享了自己遇到...
Map 和 parseInt 问题.md