QTP中处理超15个字符串及长字符转int求和的方法咨询
QTP(UFT)中超长字符串处理与数值转换问题解答
问题1:如何在QTP中添加或转换超过15个字符的字符串?
分两种核心场景来解决:
- 字符串拼接:QTP基于的VBScript对字符串长度支持极强(最大可容纳2^31-1个字符),直接用
&运算符就能轻松完成超长字符串的拼接,完全不用担心长度限制,示例:longStr1 = "abcdefghijklmnopqrstuvwxyz123456" longStr2 = "7890abcdefghijklmnopqrstuvwxyz" combinedStr = longStr1 & longStr2 - 超长数字字符串转数值:如果是要把超过15位的数字字符串转成数值类型,VBScript原生的
CInt/CLng有范围上限,CDbl超过15位会丢失精度并显示为科学计数法。这种情况建议直接用字符串模拟数值运算(参考问题2的方案),避免转换导致的精度损失。
问题2:超长数字字符串转整数求和(避免指数值)
你遇到的问题是VBScript数值类型的天然限制:CLng最大只能处理到2147483647,CDbl虽然能处理更大的数,但超过15位的整数会丢失精度,转成数值后不仅显示为科学计数法,求和结果也不准确。
最可靠的方案是直接对数字字符串进行运算,不用转换成数值类型。针对你需要的“字符串加1”场景,我写了一个自定义函数来实现精确运算:
Function AddOneToLongString(strNum) Dim arrNum, i, carry, digit ' 反转字符串,方便从个位开始处理进位 arrNum = Split(StrReverse(strNum), "") carry = 1 ' 初始进位为1,因为要执行加1操作 For i = 0 To UBound(arrNum) digit = CInt(arrNum(i)) + carry If digit = 10 Then arrNum(i) = 0 carry = 1 Else arrNum(i) = digit carry = 0 Exit For ' 没有进位后,后面的数字无需再处理 End If Next ' 处理全9的情况,比如9999加1后需要新增一位(变成10000) If carry = 1 Then ReDim Preserve arrNum(UBound(arrNum) + 1) arrNum(UBound(arrNum)) = 1 End If ' 反转回原顺序得到最终结果 AddOneToLongString = StrReverse(Join(arrNum, "")) End Function
使用示例:
Stroutput = "2018050302216556" Sum = AddOneToLongString(Stroutput) MsgBox Sum ' 会输出精确的2018050302216557
如果需要更复杂的求和(比如多个超长数字字符串相加),可以基于这个思路扩展函数,逐位处理每一个数字的相加和进位,确保精度完全不会丢失。
内容的提问来源于stack exchange,提问作者Sabry
相关产品推荐
相关产品推荐

