【问题标题】:How to convert string to double in VBScript?如何在VBScript中将字符串转换为double?
【发布时间】:2013-09-09 08:30:08
【问题描述】:

我需要在 VBScript 中编写一些代码,并在需要比较的文本文件中有一个版本号字符串。如果我写这段代码作为测试:

option explicit

Dim VersionString
VersionString = "6.2.1"

Dim Version
Version = CDbl (VersionString)

Version = Version * 100

我在 CDbl 线路上遇到错误:

Microsoft VBScript runtime error: Type mismatch: 'CDbl'

我应该如何读取和比较这个字符串值?

【问题讨论】:

  • 它可能无法正常工作,因为有两个小数点。您必须删除其中一个或两个才能将其转换为数字类型
  • @jonhopkins 请写为答案,我会接受

标签: vbscript


【解决方案1】:

"6.2.1" 不是 Double 格式的字符串。所以 CDbl() 不能转换它。您的选择是:

  1. 将版本视为字符串;好的,如果你只需要比较是否相等,如果你需要“6.9.1”小于“6.10.2”,那就不好了
  2. Split() "." 上的字符串并分别处理部分(可能转换为整数/长整数);您需要为此类数组编写一个比较函数
  3. 删除“.”并 CLng 生成的字符串;像“6.10.2”这样的版本会中断
  4. Split() "*" 上的字符串并乘 + 加 'digits' 以获得一个(整数)版本号(您的示例为 6 * 100 + 2 * 10 + 1 * 1 = 621);对于像“15.00.30729.01”这样的版本可能会更复杂

【讨论】:

    【解决方案2】:

    由于字符串中有两个小数点,因此无法转换为双精度。要转换字符串,您必须删除其中一个或两个。

    为此,您可以使用替换功能。替换的语法是

    Replace(string, find, replacewith [, start [, count [, compare]]])
    

    其中string 是要搜索的字符串,find 是要查找的子字符串,replacewith 是要替换find 的子字符串,start 是可选参数,指定开始搜索的索引, count 是可选参数,指定要进行多少次替换,compare 是可选参数,0 (vbBinaryCompare) 执行二进制比较,或 1 (vbTextCompare) 执行文本比较

    ' Remove all decimals
    Version = CDbl(Replace(VersionString, ".", "")
    
    ' Remove only the first decimal
    Version = CDbl(Replace(VersionString, ".", "", 1, 1)
    
    ' Remove only the second decimal
    Version = CDbl(Replace(VersionString, ".", "", 3, 1)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-13
      • 2011-06-30
      相关资源
      最近更新 更多