Pergunta

Eu tenho um aplicativo Visual Basic que precisa arredondar um número para baixo, por exemplo, 2.556 se tornaria 2,55 e não 2,26.

Eu posso fazer isso usando uma função para retirar os caracteres mais de 2 direita do ponto decimal usando este:

Dim TheString As String
TheString = 2.556
Dim thelength = Len(TheString)
Dim thedecimal = InStr(TheString, ".", CompareMethod.Text)
Dim Characters = thelength - (thelength - thedecimal - 2)
_2DPRoundedDown = Left(TheString, Characters)

Existe uma função melhor de fazer isso?

Foi útil?

Solução

Você pode fazer isso com Math.Floor . No entanto, você precisa multiplicar * 100 e dividir, desde que você não pode fornecer um número de dígitos

Dim theNumber as Double
theNumber = 2.556
Dim theRounded = Math.Sign(theNumber) * Math.Floor(Math.Abs(theNumber) * 100) / 100.0

Outras dicas

Outra maneira de fazer isso que não se baseia em usar o tipo String:

Dim numberToRound As Decimal
Dim truncatedResult As Decimal
numberToRound = 2.556
truncatedResult = (Fix(numberToRound*100))/100

O Math.Floor () resposta é boa. Não tenho certeza exatamente quais VB ambientes Fix () é definido. Como Justin aponta, Math.Floor () não funcionará com números negativos. Você teria que tomar o valor absoluto, em seguida, multiplicar pela SGN () do número. Eu não sei o nome exato da função que você pode usar para obter o sinal (não sin ()) do número.

Em pseudo-código, tomando valores negativos em consideração, o resultado seria se parece com:

result = sgn( num ) * floor( abs( num * RoundToDig ) ) / RoundToDig

- vacas peludas moo e descomprimir.

Para baixo rodada

Math.Floor(number)

Para aparar caracteres

number.Substring(0,1)

Você pode convertê-lo para string.

Dim Input As Decimal
Dim Output As Decimal
Input = 2.556
Output = Input - (Input Mod 0.01)

Este irá trabalhar com ambos os números positivos e negativos

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top