我编写了一个取整数并将其转换为十进制,十六进制或二进制的方法,具体取决于您使用注释选择的内容。我将在以后建立一个选择。我遇到的问题是选择了错误的值,我认为它与模数运算符返回错误的值有关。它可能是一个舍入问题,因为我似乎总是偏离1位数,但不是字符串中的每个字符。任何帮助,将不胜感激。例如,现在设置给出小数值。因此,如果你运行它并输入1705,它应该返回1705,但它返回2705.十六进制和二进制不是更好。
Do While val >= 1 'finds the remainder and assigns it array
r = val Mod base
buf(i) = arr(r)
'Possible rounding issue:
val = val / base 'need whole number division to find val.
i = i - 1 'decrement the buf array
Loop
答案 0 :(得分:1)
Mod()
对整数值进行操作。如果您传递的值不是整数值,VBScript会将其四舍五入为最接近的整数。这就是1705的值所发生的情况。经过三次迭代后,你得到1.705,Mod()
轮到2。
所以现在问题变成了,为什么你首先将浮点值传递给Mod()
?原因是因为VBScript在以下语句中进行浮点除法:
val = val / base
由于您不关心余数(您已经捕获了它),因此该语句需要执行整数除法,而不是浮点除法。幸运的是,VBScript使整数除法变得容易。只需使用反斜杠而不是正斜杠:
val = val \ base