很多静态类型编程语言,不允许将非数值类型转换成数值类型,一些脚本语言为了简化复杂度,允许非数值类型按照特定规则转换成数值类型。
- JS
- Undefined类型 --> NaN.
- Null类型 --> 0.
- Boolean类型 true --> 1, false --> 0.
- String类型根据是十进制还是十六进制或者浮点数,转换成对应数值。注意,这里没有八进制数值,字符串"012"转换成数值是十进制的12,而不是八进制的012.
如果是空字符串或者多个空格,数值是0,如果是除了如上的其他字符串,即是非法数值,转换结果是NaN. - Object类型转换为数值经过2个步骤,先调用valueOf()函数,按照如上规则,有合法数值即返回,如果返回NaN, 继续调用toString()函数,同样按照如上规则得到数值,如果没有数值类型返回,返回NaN.
- C#
- 基本类型提供隐式转换或者强制转换。
- 字符串转换成基本类型:
- <Type>.Parse(<String>)
例如int.Parse("123") - <Type>.TryParse(<String>, out <Val>) (C# 2.0 ?)
和Parse的区别是,此函数转换失败不会抛出异常。
- <Type>.Parse(<String>)
- 字符串转换成基本类型:
- System.Convert.ToXXX(<String>)
例如ToInt, ToFloat, ...
- System.Convert.ToXXX(<String>)
- VB
- Val(str) 将str转换成数值,如果str包含不能转换为数值的字符,转换就此终止,返回已解析的数值。例如:
Val("a12") 返回 0,Val("-123ab") 返回 -123.
- Val(str) 将str转换成数值,如果str包含不能转换为数值的字符,转换就此终止,返回已解析的数值。例如:
转换成数值的API
- JS
Number函数用于将任何类型转换成数值。
parseInt函数和parseFloat函数都可以将字符串转换为数值。要特别注意,传入字符串和数值类型将导致结果不同,数值类型的参数会先转换为字符串再参与转换。例如parseInt(0x10, 16)和parseInt('0x10', 16)结果分别是22和16.