JavaScript的parseInt 取整使用
Java 也有 Integer.parseInt() 方法, 但是 JavaScript 的 parseInt 处理方式与 Java 等强整型语言不太一样, 所以经常有人因为对这个方法的使用不当而获得异常返回.
下面是一段 Java 代码, 用于将字符串 020 转为整型.
输出结果是 20
下面是一段 JavaScript 代码, 同样是将字符串 020 转为整型.
输出结果是 16
为什么呢?
无论是 Java 还是 JavaScript, parseInt 方法都有两个参数, 第一个参数就是要转换的对象, 第二个参数是进制基数, 可以是 2, 8, 10, 16, 默认以 10 进制处理. 但在 JavaScript 中, 0 开始的数被认为使用 8 进制处理, 0x 的数被认为是用 16 进制来处理. 所以上面的 JavaScript 代码计算错误了.
影响大吗?
大! 很大! 因为这个经常用于计算价钱, 一旦价格错误, 对用户来说, 这是误导, 而一个好的网站不应该出现这种误导用户的. 下面的 DEMO 中, 没有指定进制. 大家可以在数量框中输入一个以 0 开头的数字, 在点击计算按钮, 算出来的数值将比预想中的小一些, 或者小很多 (如: 8 进制中没有 019 这样的数值, 所以数值变成了 1, 9 被忽略掉).
没有为 parseInt 函数指定进制的 DEMO
如何修改?
前面说过, 有两个参数, 第二个参数可以指定计算使用的进制.
所以我们可以将前面有问题的那段 JavaScript 代码改写为下面的代码.
这样处理的话, 我们再重写一些前面的 DEMO, 如下:
为 parseInt 函数指定进制为 10 的 DEMO
记住了, 在 JavaScript 上使用 parseInt 方法时要带上进制参数.
下面是一段 Java 代码, 用于将字符串 020 转为整型.
代码如下:
public class Test { public static void main(String args[]) throws Exception { String str = "020"; System.out.println(Integer.parseInt(str)); } }
输出结果是 20
下面是一段 JavaScript 代码, 同样是将字符串 020 转为整型.
代码如下:
var str = "020"; var num = parseInt(str); alert(num);
输出结果是 16
为什么呢?
无论是 Java 还是 JavaScript, parseInt 方法都有两个参数, 第一个参数就是要转换的对象, 第二个参数是进制基数, 可以是 2, 8, 10, 16, 默认以 10 进制处理. 但在 JavaScript 中, 0 开始的数被认为使用 8 进制处理, 0x 的数被认为是用 16 进制来处理. 所以上面的 JavaScript 代码计算错误了.
影响大吗?
大! 很大! 因为这个经常用于计算价钱, 一旦价格错误, 对用户来说, 这是误导, 而一个好的网站不应该出现这种误导用户的. 下面的 DEMO 中, 没有指定进制. 大家可以在数量框中输入一个以 0 开头的数字, 在点击计算按钮, 算出来的数值将比预想中的小一些, 或者小很多 (如: 8 进制中没有 019 这样的数值, 所以数值变成了 1, 9 被忽略掉).
没有为 parseInt 函数指定进制的 DEMO
如何修改?
前面说过, 有两个参数, 第二个参数可以指定计算使用的进制.
代码如下:
parseInt(num, radix);
所以我们可以将前面有问题的那段 JavaScript 代码改写为下面的代码.
代码如下:
var str = "020"; var num = parseInt(str, 10); alert(num);
这样处理的话, 我们再重写一些前面的 DEMO, 如下:
为 parseInt 函数指定进制为 10 的 DEMO
记住了, 在 JavaScript 上使用 parseInt 方法时要带上进制参数.
相关推荐
85443563 2018-12-07
thomas0yang 2019-06-28
xian 2016-11-10
小丫00 2013-12-21
Raindan 2012-11-13
yyzhu 2011-08-15
GUAOSHITAIDU 2011-07-12
rou 2011-04-27
夜光寒 2016-12-30
theRoom 2015-03-16
wangchunbo空间 2015-04-14
卜小娴 2015-03-11
mzoy 2016-05-26
luantianjiao 2016-04-12
mjx00 2016-02-05
86590891 2019-04-24
88417615 2019-04-18