2009-08-04 14 views
7

Mam aplikację Visual Basic, która musi zaokrąglić liczbę w dół, na przykład 2,556 będzie 2,55, a nie 2,26.Zaokrąglanie liczby w dół w języku Visual Basic

mogę to zrobić za pomocą funkcji zdejmować znaki ponad 2 prawo od kropki dziesiętnej przy użyciu tego:

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) 

Czy istnieje lepsza funkcja to zrobić?

Odpowiedz

10

Możesz to zrobić pod numerem Math.Floor. Jednak trzeba pomnożyć * 100 i podzielić, ponieważ nie można dostarczyć liczbę cyfr

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

To nie będzie działać, jeśli liczba jest ujemna. – Justin

+0

Czasami korzystne jest przechowywanie liczb jako liczb całkowitych lub stałoprzecinkowych (jeśli nie potrzebujesz pełnego zakresu zmiennoprzecinkowego), wykonywanie obliczeń na stałych numerach, a następnie dostosowywanie ich podczas wyświetlania użytkownikowi. –

+0

@Justin: Dobra uwaga - redagowałem, aby uwzględniać liczby ujemne, a także pozytywne –

3

Innym sposobem na to, że nie opierają się na użyciu typu String:

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

Używanie Fix() będzie nieco szybsze niż przy użyciu Floor(). – Justin

+2

Czy cokolwiek popiera to stwierdzenie? –

+1

@Justin: Fix jest faktycznie wolniejszy niż Math.Floor - sprawdza, a następnie wywołuje Math.Floor wewnętrznie. Uruchomienie odbłyśnika w pliku Microsoft.VisualBasic.dll w celu uzyskania szczegółowych informacji. –

2

Odpowiedź Math.Floor() jest dobra. Nie jestem pewien, które dokładnie środowiska VB Fix() są zdefiniowane w. Jak Justin wskazuje, Math.Floor() nie będzie działać z liczbami ujemnymi. Będziesz musiał przyjąć wartość bezwzględną, a następnie pomnożyć przez numer SGN(). Nie znam dokładnej nazwy funkcji, której użyłbyś, aby uzyskać numer SiGN (nie sin()).

W pseudo-kodu, biorąc pod uwagę wartości ujemne, wynik byłby wygląda następująco:

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

- Furry krowy moo i dekompresji.

+0

Jestem przyzwyczajony do funkcji Fix() z VB6, ale jest ona również dostępna w VB.NET - http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.conversion.fix.aspx –

+0

@WyrdestGeek: Funkcja to Math.Sign. @Saul: Napraw wywołania Math.Floor wewnętrznie. –

+0

Co to za interes o dekompresji bydła? –

1

Aby zaokrąglić w dół

Math.Floor(number) 

Aby przyciąć znaki

number.Substring(0,1) 

można przekonwertować go na sznurku.

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

To będzie działać zarówno pozytywnych, jak i negatywnych liczb

Powiązane problemy