奇思妙想 · 2024年 10月 7日 0

其它类型转换成数值类型

24 次浏览

很多静态类型编程语言,不允许将非数值类型转换成数值类型,一些脚本语言为了简化复杂度,允许非数值类型按照特定规则转换成数值类型。

  • 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的区别是,此函数转换失败不会抛出异常。
    • 字符串转换成基本类型:
      • System.Convert.ToXXX(<String>)
        例如ToInt, ToFloat, ...
  • VB
    • Val(str) 将str转换成数值,如果str包含不能转换为数值的字符,转换就此终止,返回已解析的数值。例如:
      Val("a12") 返回 0,Val("-123ab") 返回 -123.

转换成数值的API

  • JS
    Number函数用于将任何类型转换成数值。
    parseInt函数和parseFloat函数都可以将字符串转换为数值。要特别注意,传入字符串和数值类型将导致结果不同,数值类型的参数会先转换为字符串再参与转换。例如parseInt(0x10, 16)和parseInt('0x10', 16)结果分别是22和16.