Completando um baixo número no Visual Basic
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?
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