apenas arredondar valores abaixo de 0.5 para cima na VBS

0

Preciso de ajuda no meu script VBS.

Eu uso isso para mostrar a cada 10% um status:

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

Funciona muito bem, se o valor máximo estiver acima de 5. Em 5 o script falha, porque mod converte os 2 números com int e arredondado. Então, 0,4 muda para 0 e uma divisão de mod falha.

Existe um caminho fácil (na mesma linha) para arredondar sempre correto, mas nada abaixo de 1.

no VB.net eu usaria isso:

if x mod (iif((Max / 100 * everyPercent) < 1, 1, Max / 100 * everyPercent) = 0 then
    
por Joe6pack 18.10.2017 / 17:39

1 resposta

0

Estou confuso sobre por que isso tem que estar em uma única linha e um simples

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

Não é suficiente, mas se você é tão fã de inline, por que não criar você mesmo?

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

Se você criar uma função como essa, você pode usá-la exaclty como se fosse um ifif.

    
por 13.12.2017 / 16:12

Tags