Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

kako da ispisem 23.568,32

[es] :: Visual Basic 6 :: kako da ispisem 23.568,32
(Zaključana tema (lock), by Aleksandar Ružičić)
Strane: 1 2 3

[ Pregleda: 6794 | Odgovora: 47 ] > FB > Twit

Postavi temu

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Brain raider
Brain raider

Član broj: 35767
Poruke: 251
79.101.128.*

ICQ: 410931947
Sajt: www..com


+2 Profil

icon kako da ispisem 23.568,3229.03.2008. u 15:04 - pre 195 meseci
Dakle kako da u vb6 odradim da mi dobijeni broj ispisuje u dve decimale i da razdvaja hiljade ovako 23.568,32
sabiranjem i mnozenjem vrednosti progres bara dovijam cifru koju mi ispisuje u lejeru a kako da je ispise kako meni treba?
HVALA
 
0

goranvuc
Goran Vucicevic
Novi Sad

Član broj: 4934
Poruke: 1846
79.101.207.*



+41 Profil

icon Re: kako da ispisem 23.568,3229.03.2008. u 17:36 - pre 195 meseci
Code:

Print Format(23568.32, "###,##0.00")
 
0

Brain raider
Brain raider

Član broj: 35767
Poruke: 251
79.101.128.*

ICQ: 410931947
Sajt: www..com


+2 Profil

icon Re: kako da ispisem 23.568,3203.04.2008. u 14:28 - pre 195 meseci
Mozda ja nisam lepo predstavio problem.
U text box unosim cifru a ona treva da se pojavi u lejeru
Print Format(23568.32, "###,##0.00") ovo stvarno ne znam kako da iskoristim cifru u naslovu sam dao kao primer
ta cifra se menja jako cesto u proseku 400 puta dnevno
 
0

Aleksandar Vasic
Web Administrator, Uspon d.o.o
Čačak

Član broj: 91692
Poruke: 1226
*.eunet.yu.

Sajt: www.vasictech.net


+1 Profil

icon Re: kako da ispisem 23.568,3203.04.2008. u 14:37 - pre 195 meseci
Samo umesto "cifra" postavish promeljivu koja ce nositi vrednost te cifre,Textbox ili sta vec ti koristish...

Code:
Print Format(cifra, "###,##0.00")
 
0

BiF

Član broj: 39763
Poruke: 90
89.216.46.*



Profil

icon Re: kako da ispisem 23.568,3206.04.2008. u 07:36 - pre 195 meseci
Pa, jeste, ali ako podešavanja u "regional and language options" u control panelu nisu odgovarajuća možeš dobiti rezultat 23,568.32 umesto 23.568,32. Problem nije ozbiljan ako program radiš za sebe, ali ako će program koristiti i 1000 drugih osoba koji možda imaju vrlo malo znanje o tome neće dobiti rezultat kakav ti želiš da dobiju a verovatno i oni
Nijedan nepušač još nije preživeo.
 
0

rgdrajko
Beograd

Član broj: 117734
Poruke: 710
80.93.249.*



+3 Profil

icon Re: kako da ispisem 23.568,3206.04.2008. u 19:08 - pre 195 meseci
Evo resenja za bilo koji broj do 12 cifara sa bilo koliko decimala, sa izborom znaka separatora za hiljade i izborom znaka separatora za decimalu.

Code:
'Autor: Rajko Kuzmanovic

Const SeparatorZaHiljade = "."
Const SeparatorZaDecimalu = ","

Option Explicit

Private Sub cmdStart_Click()
    Dim cifra As String
    
    If txtCifra.Text = "" Then
        txtCifra.Text = "0"
    End If
    cifra = txtCifra.Text
    
    txtKonvertovanaCifra.Text = Konverzija(cifra)
End Sub

Public Function Konverzija(cifra) As String
    Dim broj As String
    Dim Ceobroj As String
    Dim NoviCeoBroj As String
    Dim Ostatak As String
    
    broj = cifra
    
    Ceobroj = broj
    Ostatak = "0"
    
    If InStr(CStr(broj), ".") <> 0 Then
        Ceobroj = Left(broj, InStr(broj, ".") - 1)
        Ostatak = Mid(broj, InStrRev(broj, ".") + 1)
    End If
    
    If InStr(CStr(broj), ",") <> 0 Then
        Ceobroj = Left(broj, InStr(broj, ",") - 1)
        Ostatak = Mid(broj, InStrRev(broj, ",") + 1)
    End If
    
    If Len(Ceobroj) <= 3 Then
        NoviCeoBroj = Ceobroj
    End If
    If Len(Ceobroj) > 3 And Len(Ceobroj) <= 6 Then
        NoviCeoBroj = Left(Ceobroj, Len(Ceobroj) - 3) & SeparatorZaHiljade & Right(Ceobroj, 3)
    End If
    If Len(Ceobroj) > 6 And Len(Ceobroj) <= 9 Then
        NoviCeoBroj = Left(Ceobroj, Len(Ceobroj) - 6) & SeparatorZaHiljade & Mid(Ceobroj, 4, 3) & SeparatorZaHiljade & Right(Ceobroj, 3)
    End If
    If Len(Ceobroj) > 9 And Len(Ceobroj) <= 12 Then
        Stop
        NoviCeoBroj = Left(Ceobroj, Len(Ceobroj) - 9) & SeparatorZaHiljade & Mid(Ceobroj, 4, 3) & SeparatorZaHiljade & Mid(Ceobroj, 7, 3) & SeparatorZaHiljade & Right(Ceobroj, 3)
    End If
    If Len(Ceobroj) > 12 And Len(Ceobroj) < 15 Then
        NoviCeoBroj = Left(Ceobroj, Len(Ceobroj) - 12) & SeparatorZaHiljade & Mid(Ceobroj, 4, 3) & SeparatorZaHiljade & Mid(Ceobroj, 7, 3) & SeparatorZaHiljade & Mid(Ceobroj, 10, 3) & SeparatorZaHiljade & Right(Ceobroj, 3)
    End If
    
    Konverzija = NoviCeoBroj & SeparatorZaDecimalu & Ostatak
End Function

Private Sub txtCifra_Change()
    txtKonvertovanaCifra.Text = ""
End Sub

rgdrajko
Prikačeni fajlovi
 
0

dava
Banja Luka

Član broj: 27208
Poruke: 893



+384 Profil

icon Re: kako da ispisem 23.568,3207.04.2008. u 10:42 - pre 195 meseci
Moze i ovako:

Code:

    cifra = FormatNumber(txtCifra.Text)


a evo kako na jednostavan nacin da se dobije decimalni separator:

Code:

    Dim DecimalniZnak As String
    
    DecimalniZnak = Mid((3 / 2), 2, 1)




[Ovu poruku je menjao dava dana 07.04.2008. u 11:52 GMT+1]
SELECT * FROM หน่วยงานหลัก WHERE ยสันติ LIKE 'โดย%'
 
0

BiF

Član broj: 39763
Poruke: 90
89.216.46.*



Profil

icon Re: kako da ispisem 23.568,3208.04.2008. u 04:57 - pre 195 meseci
Davo nisi mi jasan uopste, a Rajko ga bas zakomplikovao
Nijedan nepušač još nije preživeo.
 
0

rgdrajko
Beograd

Član broj: 117734
Poruke: 710
80.93.249.*



+3 Profil

icon Re: kako da ispisem 23.568,3208.04.2008. u 07:39 - pre 195 meseci
[quote]dava: Moze i ovako:

Code:

    cifra = FormatNumber(txtCifra.Text)


a evo kako na jednostavan nacin da se dobije decimalni separator:

Code:

    Dim DecimalniZnak As String
    
    DecimalniZnak = Mid((3 / 2), 2, 1)


Ok, ako moze i tako daj kod da bi ovaj forum bio ozbiljniji i da bi mnogi od nas nesto i naucili, da ne bude puko pricanje sa puno nejasnoca.


Citat:
BiF: Davo nisi mi jasan uopste, a Rajko ga bas zakomplikovao


Slazem se, to je uradjeno na brzinu, prema gornjem zahtevu i onda je prosireno na sve brojeve do 15 cifrara i negraniceni broj decimala, sto je ipak malo veci zahtev. Moze se sada uraditi optimizacija i dati objasnjenje koda ako ima potrebe za tim.
rgdrajko
 
0

dava
Banja Luka

Član broj: 27208
Poruke: 893



+384 Profil

icon Re: kako da ispisem 23.568,3208.04.2008. u 08:25 - pre 195 meseci
Stvarno ne znam kako jednostavnije da napisem, ali evo pokusacu:

FormatNumber je VB-ova ugradjena funkcije

koristi se tako sto joj proslijedimo parametar (neka brojcana vrijednost)

ta ista f-ja vrati upravo ono sto si BiF trazio: formatira broj sa separatorima hiljada ("." ili "," zavisno od regional settings)

Probaj:
Code:

Debug.Print FormatNumber("23568,32")

ili

Debug.Print FormatNumber("23524353268,33467457457777777777777756474574574572", 20)


drugim parametrom podesavas koliko decimalnih mjesta da vrati.

E sad, ako si u regional sett. podesio da ti je dec. separator tacka onda mozes da ocekujes ovakav rezultat: 23,568.23

Pozdrav
SELECT * FROM หน่วยงานหลัก WHERE ยสันติ LIKE 'โดย%'
 
0

rgdrajko
Beograd

Član broj: 117734
Poruke: 710
80.93.249.*



+3 Profil

icon Re: kako da ispisem 23.568,3208.04.2008. u 15:48 - pre 195 meseci
Citat:
dava: Stvarno ne znam kako jednostavnije da napisem, ali evo pokusacu:

FormatNumber je VB-ova ugradjena funkcije

koristi se tako sto joj proslijedimo parametar (neka brojcana vrijednost)

ta ista f-ja vrati upravo ono sto si BiF trazio: formatira broj sa separatorima hiljada ("." ili "," zavisno od regional settings)

Probaj:
Code:

Debug.Print FormatNumber("23568,32")

ili

Debug.Print FormatNumber("23524353268,33467457457777777777777756474574574572", 20)


drugim parametrom podesavas koliko decimalnih mjesta da vrati.

E sad, ako si u regional sett. podesio da ti je dec. separator tacka onda mozes da ocekujes ovakav rezultat: 23,568.23

Pozdrav ;)



Odlicno, to svi znamo! I kakve to veze ima sa:

Citat:
Brain raider: Dakle kako da u vb6 odradim da mi dobijeni broj ispisuje u dve decimale i da razdvaja hiljade ovako 23.568,32
sabiranjem i mnozenjem vrednosti progres bara dovijam cifru koju mi ispisuje u lejeru a kako da je ispise kako meni treba?
HVALA

rgdrajko
 
0

dava
Banja Luka

Član broj: 27208
Poruke: 893



+384 Profil

icon Re: kako da ispisem 23.568,3209.04.2008. u 07:48 - pre 195 meseci
A sta ti tacno nije jasno?
Ono sve sto si pisao je suvisno kad postoji gotova funkcija koja sasvim fino radi. Do duse radi i tvoj kod samo mislim da je moglo i komplikovanije.
Evo jedan misaoni zadatak.
uoci logicku slicnost:
Code:

txtKonvertovanaCifra.Text = Konverzija(cifra)

txtKonvertovanaCifra.Text = FormatNumber(cifra)

:)
SELECT * FROM หน่วยงานหลัก WHERE ยสันติ LIKE 'โดย%'
 
0

rgdrajko
Beograd

Član broj: 117734
Poruke: 710
80.93.249.*



+3 Profil

icon Re: kako da ispisem 23.568,3209.04.2008. u 15:40 - pre 195 meseci
Pa ti ocigledno ne citas sve. Pogledaj ovo:
Citat:
BiF: Pa, jeste, ali ako podešavanja u "regional and language options" u control panelu nisu odgovarajuća možeš dobiti rezultat 23,568.32 umesto 23.568,32. Problem nije ozbiljan ako program radiš za sebe, ali ako će program koristiti i 1000 drugih osoba koji možda imaju vrlo malo znanje o tome neće dobiti rezultat kakav ti želiš da dobiju a verovatno i oni

rgdrajko
 
0

Aleksandar Ružičić
Software Architect, Appricot d.o.o.
Beograd

Član broj: 26939
Poruke: 2881

Jabber: krckoorascic@gmail.com
Sajt: krcko.net


+44 Profil

icon Re: kako da ispisem 23.568,3209.04.2008. u 16:05 - pre 195 meseci
evo resenja (nema ogranicenja kao rajkovo resenje a i jednostavnije je mnogo):
Code:

Public Function FormatNum(num As Double, Optional thSep As String = ".", Optional decSep As String = ",", Optional numAfterDec As Long = 2) As String
    
    Dim sNum    As String
    Dim i       As Long
    
    sNum = StrReverse(CStr(Int(num)))
    
    For i = 1 To Len(sNum) Step 3
        
        sNum = Left(sNum, i + 2) & thSep & Right(sNum, Len(sNum) - i - 2)
        
        i = i + 1
        
    Next

    If Len(sNum) Mod 4 = 0 Then sNum = Left(sNum, Len(sNum) - 1)
    
    FormatNum = StrReverse(sNum) & decSep & Left(Mid(CStr(num - Int(num)), 3) & String(numAfterDec, "0"), numAfterDec)

End Function


formatirace broj nezavisno od podesavanja u regional settings (za razliku od VB-ove FormatNumber fje), karakteri koji se koriste kao separatori se prosledjuju funkciji (default su . za hiljade i , za decimalnu tacku) a moguce je i odrediti koliko brojeva posle decimale ce se prikazati (mada nema zaokruzivanja)


@rgdrajko: umesto da proveravas da li je broj ceo tako sto trazis "." sa InStr bolje resenje je da koristis If num - Int(num) > 0 Then (ako je razlika veca od nule onda je broj razlomljen, a ukolko je 0 onda je broj ceo) jer su operacije sa stringovima znatno sporije od operacija sa brojevima.

i rajko imam jednu molbu za tebe: jel mozes malo manje da koristis [quote][/quote] tagove u svojim postovima? vecina citata koje si ti naveo u ovoj temi su suvisni, ako je poruka na koju odgovaras iznad tvoje onda nema potrebe koristiti quote, i citirati celu poruku je sasvim bespotrebno, ukoliko se obracas autoru poruke (koju si hteo da citiras) koristi @ImeAutora jer je tako tema mnogo laksa za citanje. ukoliko odgovaras na odredjeni deo necije poruke onda slobodno koristi quote (tako sto ces da navedes samo deo poruke na koji odgovaras)
hvala na razumevanju!

[Ovu poruku je menjao Aleksandar Ružičić dana 09.04.2008. u 17:17 GMT+1]
 
0

rgdrajko
Beograd

Član broj: 117734
Poruke: 710
80.93.249.*



+3 Profil

icon Re: kako da ispisem 23.568,3209.04.2008. u 16:23 - pre 195 meseci
Citat:
Aleksandar Ružičić: evo resenja (nema ogranicenja kao rajkovo resenje a i jednostavnije je mnogo):


Izvini ali moram da kazem da i ti kao i mnogi ne citas sta je napisano:
Citat:
rgdrajko: Evo resenja za bilo koji broj do 12 cifara sa bilo koliko decimala, sa izborom znaka separatora za hiljade i izborom znaka separatora za decimalu.


Prepostavljam da i tvoj kod moze da radi za bilo koliko decimala, npr za 100 ili hiljadu decimala, a i pretpostavljam da i tvoj kod takodje omogucava izbor znaka za separator hiljade i znaka za separator za decimale.
Mnogo pretpostavljam, zar ne.

rgdrajko
 
0

goranvuc
Goran Vucicevic
Novi Sad

Član broj: 4934
Poruke: 1846
77.46.226.*



+41 Profil

icon Re: kako da ispisem 23.568,3209.04.2008. u 16:23 - pre 195 meseci
Ja ne razumem oko čega se ovde raspravljate: dobra osobina svake aplikacije je da poštuje korisnička podešavanja, tj. da brojeve i datume prikazuje onako kako je korisnik definisao u regionalnim podešavanjima.

Obraloženje: Ako sam ja navikao da u svim aplikacijama koje koristim na svom računaru koristim "," kao decimalni separator, a "." kao separator za hiljade, onda me nemoj zbunjivati sa tvojom aplikacijom koja "forsira" određeni raspored koji si ti zamislio i pokušavaš da mi nametneš.

U skladu s tim, ja sam još u prvom komentaru rekao da se za to koristi Format() funkcija, jer ona za to i služi.

Malo teorije: VB sadrži "local aware" funkcije i one koje to nisu, tj. univerzalne.

Local aware: Format() CDbl()....
Univerzalne: Str() Val()

Za konverziju tekstualnog unosa koji poštuje lokalna podešavanja koristite CDbl() a za prikaz u lokalnom formatu Format().

Ukoliko pišete aplikaciju koja treba da čita i piše podatke u fajlove koji će se koristiti na računarima sa raznovrsnim lokalnim formatima treba da koristite Str() i Val() funkcije - npr. Vaš program formira datoteku u koju se upisuju neki decimalni brojevi;
Upišite ih kao Str(Promenljiva) a čitajte ih kao Val(Promenljiva)

Dakle, za čitanje i pisanje preko interfejsa koristite "Local aware" funkcije, za čitanje i pisanje u txt datoteke koristite "Univerzalne" funkcije.

Ko je razumeo shvatiće
 
0

Shadowed
Vojvodina

Član broj: 649
Poruke: 12850



+4784 Profil

icon Re: kako da ispisem 23.568,3209.04.2008. u 16:32 - pre 195 meseci
Slazem se sa Goranom, a to smo vec i vise puta ponovili kao preporuku. No, ako stoji bas zahtev kakav je trazen, onda je krckovo resenje sasvim ok.
Rajko, ukoliko dva koda zadovoljavaju specifikaciju, smatra se boljim onaj koji je opstiji (uz druge parametre kao sto je duzina, preglednost itd).
 
0

Aleksandar Ružičić
Software Architect, Appricot d.o.o.
Beograd

Član broj: 26939
Poruke: 2881

Jabber: krckoorascic@gmail.com
Sajt: krcko.net


+44 Profil

icon Re: kako da ispisem 23.568,3209.04.2008. u 17:36 - pre 195 meseci
goran je u pravu, treba koristiti local-aware fje, ali posto je zapocela rasprava o tome kako je potreban kod koji nije local-aware ja sam uradio fju koja to radi (morao sam to da uradim kada sam video rajkovu fju :D)

Citat:
rgdrajko:Izvini ali moram da kazem da i ti kao i mnogi ne citas sta je napisano:

cekaj, zar tvoje pitanje nije malo glupo? (pardon, glupo postavljeno) jer ja da nisam citao sta si ti napisao ne bih napisao sledece:

Citat:
Aleksandar Ružičić: evo resenja (nema ogranicenja kao rajkovo resenje a i jednostavnije je mnogo):


ja tvoju fju nisam testirao iz razloga sto smatram da je lose napisana i da ti je sama logika koda mnogo ogranicena, ja sam samo uradio fju koja radi isto sto i tvoja (opet ponavljam nisam tvoj kod testirao ali pretpostavljam da radi ono sto je trazeno sa jedinim ogranicenjem od 12 cifara koje si postavio) s tim sto moja fja nema ogranicenja, jednostavnija je za razumevanje i brza je (ovo tvrdim sa 90% sigurnosti, jer nisam radio benchmark)

Citat:
rgdrajko:
Prepostavljam da i tvoj kod moze da radi za bilo koliko decimala, npr za 100 ili hiljadu decimala, a i pretpostavljam da i tvoj kod takodje omogucava izbor znaka za separator hiljade i znaka za separator za decimale.
Mnogo pretpostavljam, zar ne.

vidis, da stvarno imas toliko godina (pardon, decenija) iskustva koliko tvrdis i koliko se hvalis svojim programerskim znanjem onda si to sto pretpostavljas mogao da zakljucis jednostavnim citanjem koda...

a i jednostavnim iscitavanjem koda i poznavanjem vb-ovih tipova podataka (Double i String u ovom slucaju) mogao si da zakljucis (ili da pretpostavis ukoliko nemas dovoljno znanja) da 100 ili hiljadu decimala nije moguce predstaviti iz razloga sto se Double tip pretvara u String (pomocu CStr) a trebao bi da znas da nijedan numericki tip podataka (u bilo kom programskom jeziku) ne moze da predstavi beskonacno veliku ili beskonacno malu vrednost vec da postoje ogranicenja (koja su manja od 100 a kamoli 1000 decimala)... (samo da se razumemo ovde sam pricao o ##.## obliku zapisivanja ne o eksponencijalnom zapisu pomocu mantise)
 
0

goranvuc
Goran Vucicevic
Novi Sad

Član broj: 4934
Poruke: 1846
77.46.226.*



+41 Profil

icon Re: kako da ispisem 23.568,3209.04.2008. u 18:05 - pre 195 meseci
Citat:
Aleksandar Ružičić:a i jednostavnim iscitavanjem koda i poznavanjem vb-ovih tipova podataka (Double i String u ovom slucaju) mogao si da zakljucis (ili da pretpostavis ukoliko nemas dovoljno znanja) da 100 ili hiljadu decimala nije moguce predstaviti iz razloga sto se Double tip pretvara u String (pomocu CStr) a trebao bi da znas da nijedan numericki tip podataka (u bilo kom programskom jeziku) ne moze da predstavi beskonacno veliku ili beskonacno malu vrednost vec da postoje ogranicenja (koja su manja od 100 a kamoli 1000 decimala)... (samo da se razumemo ovde sam pricao o ##.## obliku zapisivanja ne o eksponencijalnom zapisu pomocu mantise)

Samo da potvrdim, koristenjem bilo koje funkcije formatiranja: CStr, Str, Format ... moze se predstaviti decimalni broj sa najvise 15 cifara + separatori. Dakle, moze 123456.123456789 ili 123.123456789123 ili ...

Zao mi je ako sam nekog ovim "ispalio u drustvu" ;)
 
0

Aleksandar Ružičić
Software Architect, Appricot d.o.o.
Beograd

Član broj: 26939
Poruke: 2881

Jabber: krckoorascic@gmail.com
Sajt: krcko.net


+44 Profil

icon Re: kako da ispisem 23.568,3209.04.2008. u 18:11 - pre 195 meseci
gorane hvala na potvrdi :)

samo da dodam da to sto ukupno moze najvise 15 cifara sa CStr da se dobije (nisam znao tacan broj pre ovog goranovog posta) znaci da ce onaj moj kod moci najvise 15 cifara posle decimale da prikaze (bez obzira koliko se cifara nalazi pre)

evo malo izmenjene fje (izbacen StrReverse -> brze izvrsavanje):
Code:

Public Function FormatNum(num As Double, Optional thSep As String = ".", Optional decSep As String = ",", Optional numAfterDec As Long = 2) As String
    
    Dim sNum    As String
    Dim i       As Long
    
    sNum = CStr(Int(num))
    
    For i = Len(sNum) To 1 Step -3
    
        If i > 3 Then
        
            sNum = Left(sNum, i - 3) & thSep & Mid(sNum, i - 2)
        
        End If
        
    Next

    FormatNum = sNum & decSep & Left(Mid(CStr(num - Int(num)), 3) & String(numAfterDec, "0"), numAfterDec)

End Function

a evo i primer:
Code:

Debug.Print FormatNum(Atn(1) * 4, , , 15)

rezultat:
Code:

3,141592653589793


[Ovu poruku je menjao Aleksandar Ružičić dana 09.04.2008. u 19:26 GMT+1]
 
0

[es] :: Visual Basic 6 :: kako da ispisem 23.568,32
(Zaključana tema (lock), by Aleksandar Ružičić)
Strane: 1 2 3

[ Pregleda: 6794 | Odgovora: 47 ] > FB > Twit

Postavi temu

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.