2

我已经编写了一个方法来获取整数并将其转换为十进制、十六进制或二进制,具体取决于您使用注释选择的内容。我将在稍后建立一个选择。我遇到的问题是选择了错误的值,我认为这与模运算符返回错误的值有关。这可能是一个舍入问题,因为我似乎总是偏离 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
4

1 回答 1

1

Mod()对整数值进行操作。如果您传递的值不是整数值,VBScript 将通过四舍五入到最接近的整数将其转换为 1。这就是您的值 1705 所发生的情况。经过 3 次迭代后,您将得到 1.705,Mod()四舍五入为 2。

所以现在问题变成了,为什么你首先要传递浮点值Mod()?原因是因为VBScript在下面的语句中做浮点除法:

val = val / base

由于您不关心余数(您已经捕获了它),因此该语句需要执行整数除法,而不是浮点除法。幸运的是,VBScript 使整数除法变得容易。只需使用反斜杠而不是正斜杠:

val = val \ base
于 2014-04-28T02:38:03.963 回答