I Love China

技术·人生

技术服务生活
繁體
5月 16th, 2007

[as]字符串转换成数字

[问题描述]:做Flash课件时经常遇到数学计算的问题,比如输入数字然后判断对错。如果答案是3,如果输入的是03,有时候也是算对的。所以每次判断是否相等前我会使用Number(str)将字符串转换成数字后再比较。但是转换的结果并不理所当然的是我们预料的结果。如下:

ActionScript Code:
  1. // +++++++++++++++++++ 字符串转成数字测试 +++++++++++++++++++++++
  2. var strAry:Array = String("03,035,095,038").split(",")
  3. var count:Number = strAry.length;
  4. function justTest()
  5. {
  6.     for(var i = 0; i < count; i++)
  7.     {
  8.         trace(strAry[i] + " =? " + Number(strAry[i]))
  9.     }
  10. }
  11. justTest()

你能猜到结果是什么吗?
输出结果如下:

Code:
  1. 03 =? 3
  2. 035 =? 29
  3. 095 =? 95
  4. 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