2009-08-04 4 views
7

Ho un'applicazione Visual Basic che deve arrotondare un numero in basso, ad esempio 2.556 diventerebbe 2.55 e non 2.26.Arrotondare un numero in Visual Basic

posso fare questo utilizzando una funzione per togliere i personaggi più di 2 a destra dal punto decimale di utilizzare questo:

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) 

C'è una funzione migliore per fare questo?

risposta

10

È possibile farlo con Math.Floor. Tuttavia, è necessario moltiplicare * 100 e dividere, poiché non è possibile fornire un numero di cifre

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

Questo non funziona se il numero è negativo. – Justin

+0

A volte è utile memorizzare i numeri come numeri interi o punti fissi (se non è necessario l'intervallo completo di virgola mobile), eseguire calcoli sui numeri a virgola fissa e quindi regolarli quando vengono visualizzati all'utente. –

+0

@Justin: buon punto - Ho modificato per tenere conto dei numeri negativi, oltre che positivo –

3

Un altro modo per farlo che non si basa sull'utilizzo del tipo String:

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

L'utilizzo di Correggi() sarà leggermente più veloce rispetto all'utilizzo di Floor(). – Justin

+2

Hai qualcosa che supporta questa affermazione? –

+1

@Justin: la correzione è in realtà più lenta di Math.Floor: esegue un controllo, quindi chiama Math.Floor internamente. Esegui riflettore su Microsoft.VisualBasic.dll per i dettagli. –

2

La risposta di Math.Floor() è buona. Non sono sicuro di quali ambienti VB Fix() siano definiti. Come sottolinea Justin, Math.Floor() non funzionerà con i numeri negativi. Dovresti prendere il valore assoluto, quindi moltiplicare per SGN() del numero. Non conosco il nome esatto della funzione che useresti per ottenere il SiGN (non sin()) del numero.

In pseudo-codice, assume valori negativi in ​​considerazione, il risultato sarebbe assomiglia:

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

- mucche Furry moo e decomprimere.

+0

Sono abituato alla funzione Fix() di VB6, ma è disponibile anche in VB.NET - http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.conversion.fix.aspx –

+0

@WyrdestGeek: la funzione è Math.Sign. @ Saul: corregge le chiamate Math.Floor internamente. –

+0

Cos'è questa faccenda della decompressione dei bovini? –

1

arrotondare

Math.Floor(number) 

Per assetto caratteri

number.Substring(0,1) 

È possibile convertirlo in stringa.

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

Ciò funzionerà con entrambi numeri positivi e negativi