Мне нужна помощь по моему сценарию VBS.

Я использую это для показа каждые 10 процентов статуса:

Max = 300
everyPercent = 10
for x = 1 to Max 
    if x mod Max / 100 * everyPercent = 0 then
        msgbox round((x / Max ) * 100) & "% done" & vbcr & vbcr & "Status: " & x  & "/" & Max 
    end if
next

Прекрасно работает, если максимальное значение выше 5. На 5 скрипт вылетает, потому что mod конвертирует 2 числа с int и round. Таким образом, 0,4 изменяется на 0, и деление mod не выполняется.

Есть ли простой способ (в той же строке), чтобы округлять всегда правильно, но ничего не под 1.

в VB.net я бы использовал это:

if x mod (iif((Max / 100 * everyPercent) < 1, 1, Max / 100 * everyPercent) = 0 then

1 ответ1

0

Я не понимаю, почему это должно быть в одной строке и простой

If Max / 100 * everyPercent < 1 Then
  temp = 1
Else
  temp = Max / 100 * everyPercent
If x mod temp = 0 Then
...

Недостаточно, но если вы такой поклонник inline, почему бы просто не создать его самостоятельно?

Function IIf(condition, value_if_true, value_if_false)
    If condition Then
        IIf = value_if_true
    Else 
        IIf = value_if_false
    End If
End Function

Если вы создаете такую функцию, вы можете использовать ее точно так же, как если бы вы использовали iif.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .