[as]字符串转换成数字
[问题描述]:做Flash课件时经常遇到数学计算的问题,比如输入数字然后判断对错。如果答案是3,如果输入的是03,有时候也是算对的。所以每次判断是否相等前我会使用Number(str)将字符串转换成数字后再比较。但是转换的结果并不理所当然的是我们预料的结果。如下:
ActionScript Code:
- // +++++++++++++++++++ 字符串转成数字测试 +++++++++++++++++++++++
- var strAry:Array = String("03,035,095,038").split(",")
- var count:Number = strAry.length;
- function justTest()
- {
- for(var i = 0; i < count; i++)
- {
- trace(strAry[i] + " =? " + Number(strAry[i]))
- }
- }
- justTest()
你能猜到结果是什么吗?
输出结果如下:
Code:
- 03 =? 3
- 035 =? 29
- 095 =? 95
- 038 =? 38
我们看到第1、3、4个字符串转换后是对的,但是第2个却不是我们想要的结果35,原因是什么呢?
原因在于035被当作8进制转换成了数字。我们知道凡是以0开头的数字都是8进制数。(035)8=(29)10。那么第1、3、4个字符串又如何解释呢?第1个03,也是当作8进制转换,但结果依然是3。095和038,因为里面有字符超过了7,所以不是合法的8进制,又被处理为10进制。

Leave a Reply