Forum Coders' city Strona Główna Coders' city
Nasza pasja to programowanie!
 

 PomocPomoc   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy  RejestracjaRejestracja 
Archiwum starego forum + teoria    RSS & Panel/SideBar
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

Potrzebuję szybkiej odpowiedzi na moje pytanie... Zasady

[VB6] Zaokrąglanie liczb



 
Odpowiedz do tematu    Forum Coders' city Strona Główna -> Visual Studio: C#, VB, VC++, …
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
ak



Dołączył: 13 Lut 2007
Posty: 162

PostWysłany: Pon Mar 12, 2018 6:54 pm  OP    Temat postu: [VB6] Zaokrąglanie liczb Odpowiedz z cytatem Pisownia

Witam
Jak należaloby uzupełnić formułę która zaokrąglałaby liczbę do takiej postaci:
14520 do 14500
16680 do 16700
18478 do 18500
14240 do 14200
9320 do 9300
Kod:

Text8.Text = Round(3.14 * ((c * c) - (b * b)) / (d * Text2.Text), 0)


Z góry dziekuję
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Wyślij email
samolot



Dołączył: 26 Sty 2006
Posty: 8270
Skąd: Toruń

PostWysłany: Pon Mar 12, 2018 7:56 pm      Temat postu: Odpowiedz z cytatem Pisownia

Chcesz zaokrąglać liczby całkowite. Ponieważ funkcja Round() zaokrągla liczby zmiennoprzecinkowe, a w nich to, to co po przecinku, to, przed podstawieniem liczby całkowitej do funkcji Round(), podziel liczbę całkowitą przez liczbę z taką liczbą zer, o ile pozycji planujesz zaokrąglać liczbę całkowitą. Po tym pomnóż wynik prze taka samą liczbę:

Kod:
Dim Calkowita As Integer
Calkowita = 14520
Dim Winik1 as Single
Winik1 = Calkowita/100

Dim Wynik2 as Single
Wynik2 = Round(Winik1,0)

Dim Wynik3 as Single
Wynik3 = Wynik2 * 100

_________________
Nie zadawaj bezcelowych pytań / Windows 8.1 / Windows 10 / VB2008 / VB 2010 / VB 2012 / Pisz poprawnie
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Wyślij email
losmac



Dołączył: 25 Maj 2005
Posty: 1558
Skąd: Białystok

PostWysłany: Pon Mar 19, 2018 10:17 pm      Temat postu: Odpowiedz z cytatem Pisownia

Działanie jest proste: musisz wiedzieć, co pozostaje z dzielenia danej liczby przez 100 i tę wartość odjąć, by uzyskać zaokrąglenie do pełnych setek:

Kod:
Dim liczby() As Integer = {14520, 16680, 18478, 14240, 9320}

For i As Integer = 0 To liczby.Length-1
    Dim liczba As Integer = liczby(i)
    Dim modulo As Integer = liczba Mod 100
    Dim wynik As Integer = liczba - modulo
    Console.WriteLine("{0}-{1}={2}", liczba, modulo, wynik)
Next i



Wynik:
Cytat:
14520-20=14500
16680-80=16600
18478-78=18400
14240-40=14200
9320-20=9300

_________________
książka o VBA dla Office'a
źródło wiedzy o programowaniu w VBA
UWAGA! Nie odpowiadam na PW, jeżeli wcześniej nie zostało to ze mną ustalone w ramach konkretnego wątku!
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Odwiedź stronę autora
samolot



Dołączył: 26 Sty 2006
Posty: 8270
Skąd: Toruń

PostWysłany: Wto Mar 20, 2018 12:04 am      Temat postu: Odpowiedz z cytatem Pisownia

To, co podałeś, to jest obcięcie do pełnych setek w dół, a pytającemu chodziło o zaokrąglenie:
mniej od 50 -> w dół
ponad 50 -> w górę

Pytająch chciał taki wynik:
Cytat:
14520 do 14500
16680 do 16700
18478 do 18500
14240 do 14200
9320 do 9300

A ty masz taki:
Cytat:
14520-20=14500
16680-80=16600
18478-78=18400
14240-40=14200
9320-20=9300

_________________
Nie zadawaj bezcelowych pytań / Windows 8.1 / Windows 10 / VB2008 / VB 2010 / VB 2012 / Pisz poprawnie
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Wyślij email
losmac



Dołączył: 25 Maj 2005
Posty: 1558
Skąd: Białystok

PostWysłany: Pon Kwi 09, 2018 12:02 pm      Temat postu: Odpowiedz z cytatem Pisownia

Główna idea się nie zmienia. Jeśli chodzi o zapis księgowy (do 50 w dół, od 50 w górę), to można to osiągnąć za pomocą prostej funkcji:
Kod:
Sub Main
    Dim liczby() As Integer = {14520, 16680, 18478, 14240, 9320}

    Dim ksiegowa = Function(inputValue As Integer) As Integer
        Dim modulo As Integer = inputValue Mod 100
        Return inputValue - If(modulo>50, modulo-100, modulo) 'TU!
    End Function

    For i As Integer = 0 To liczby.Length-1
        Console.WriteLine("{0} | {1}", liczby(i), ksiegowa(liczby(i)))
    Next i

End Sub


Rezultat jest dokładnie taki, jak oczekiwany:
Cytat:
14520 | 14500
16680 | 16700
18478 | 18500
14240 | 14200
9320 | 9300

_________________
książka o VBA dla Office'a
źródło wiedzy o programowaniu w VBA
UWAGA! Nie odpowiadam na PW, jeżeli wcześniej nie zostało to ze mną ustalone w ramach konkretnego wątku!
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Odwiedź stronę autora
Wyświetl posty z ostatnich:   
Odpowiedz do tematu    Forum Coders' city Strona Główna -> Visual Studio: C#, VB, VC++, … Wszystkie czasy w strefie CET (Europa)

Strona 1 z 1

 
Skocz do:  
Możesz pisać nowe tematy
Możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Możesz dodawać załączniki na tym forum
Możesz pobierać pliki z tego forum




Debug: strone wygenerowano w 0.09143 sekund, zapytan = 11
contact

| Darmowe programy i porady Jelcyna | Tansze zakupy w Helionie | MS Office Blog |