|  | 		    
					
        
         
          
         
	
          | |  | komma til punktum??? Fra : Kasper
 | 
 Dato :  04-03-03 15:56
 | 
 |  | Hej
 
 Jeg er lidt nybegynder hvad programmering angår.
 Jeg prøver mig frem i VB 5.0, og er ved at lave en "valutaomregner"
 Det, som er mit problem er, at selve "regneren" kan ikke finde ud af at
 regne med kommatal. Hvis jeg intaster et punktum istedet, så kan den godt,
 men ikke hvis jeg bruger komma-tasten på nummertastaturet...
 Hvad kan jeg gøre?
 
 På forhånd tak.
 Kasper
 
 
 
 
 |  |  | 
  S. Melgaard (05-03-2003) 
 
	
          | |  | Kommentar Fra : S. Melgaard
 | 
 Dato :  05-03-03 00:33
 | 
 |  | On Tue, 4 Mar 2003 15:56:18 +0100, "Kasper" <kasper_j@tdcadsl.dk>
 wrote:
 
 > Hvis jeg intaster et punktum istedet, så kan den godt,
 > men ikke hvis jeg bruger komma-tasten på nummertastaturet...
 > Hvad kan jeg gøre?
 
 Jeg bruger VB6.0, som har en funktion der hedder FormatNumber - Jeg
 tror også den findes i VB5.0
 
 Du kan f.eks. skrive følgende:
 
 
 Dim DitTal As Single
 
 DitTal = FormatNumber(DitTal, 3, vbUseDefault, vbUseDefault,
 vbUseDefault)
 DitTal = DitTal + DitTal
 
 
 Her lægges to decimaltal sammen......
 
 Måske der er en nemmere måde at gøre det på....men på den her måde
 bruger du den indstilling som somputeren er sat til.....Prøv dig frem
 og se om du kan få det til at virke.....Ellers kan det være der er et
 geni i NG'en der kan hjælpe!
 
 
 Mvh.
 
 Søren Melgaard
 
 
 
 |  |  | 
  Tomas Christiansen (05-03-2003) 
 
	
          | |  | Kommentar Fra : Tomas Christiansen
 | 
 Dato :  05-03-03 09:51
 | 
 |  | S. Melgaard skrev:
 > Dim DitTal As Single
 >
 > DitTal = FormatNumber(DitTal, 3, vbUseDefault, vbUseDefault,
 > vbUseDefault)
 
 Hvad er det egentlig at du vil vise her?
 Hvis DitTal er en variabel af typen Single, hvad skulle man så få ud af
 at eksplicit konvertere til en String for derefter implicit at
 konvertere tilbage til en Single???
 
 Til Kasper:
 
 Vis lige den kode, hvor du forsøger at regne på kommatalsværdierne, og
 hvor det ikke virker.
 Jeg kan nemlig slet ikke forstå hvorfor det ikke virker, idet der som
 standard benyttes komma (",") i VB på en dansk opsat Windows-maskine.
 
 Du må altså have gjort noget "specielt" for ikke at få det til at virke!
 
 -------
 Tomas
 
 
 
 |  |  | 
   Kasper (05-03-2003) 
 
	
          | |  | Kommentar Fra : Kasper
 | 
 Dato :  05-03-03 12:30
 | 
 |  | Jeg har "smidt programmet i news:dk.binear under emnet: program fra
 dk.edb.programmering.basic....
 Hvis jeg eksempelvis skriver 7,35 i kursfeltet og 2 i eurofeltet, så kan den
 ikke finde ud af at regne med det. Den bruger kun det hele tal, nemlig 7.
 Derimod hvis man skriver . istedet for , så kan den.
 Kan i hjælpe??
 
 Kasper
 
 "Tomas Christiansen" <toc-nospam-01@blikroer.dk> skrev i en meddelelse
 news:b44dp3$1p51$1@news.cybercity.dk...
 > S. Melgaard skrev:
 > Til Kasper:
 >
 > Vis lige den kode, hvor du forsøger at regne på kommatalsværdierne, og
 > hvor det ikke virker.
 > Jeg kan nemlig slet ikke forstå hvorfor det ikke virker, idet der som
 > standard benyttes komma (",") i VB på en dansk opsat Windows-maskine.
 >
 > Du må altså have gjort noget "specielt" for ikke at få det til at virke!
 >
 > -------
 > Tomas
 >
 
 
 
 
 |  |  | 
    Kasper (05-03-2003) 
 
	
          | |  | Kommentar Fra : Kasper
 | 
 Dato :  05-03-03 12:53
 | 
 |  | glemte og siget at den er YencEncoded... Men håber i får det til at virke...
 
 "Kasper" <kasper_j@tdcadsl.dk> skrev i en meddelelse
 news:3e65e187$0$52105$edfadb0f@dread16.news.tele.dk...
 > Jeg har "smidt programmet i news:dk.binear under emnet: program fra
 > dk.edb.programmering.basic....
 > Hvis jeg eksempelvis skriver 7,35 i kursfeltet og 2 i eurofeltet, så kan
 den
 > ikke finde ud af at regne med det. Den bruger kun det hele tal, nemlig 7.
 > Derimod hvis man skriver . istedet for , så kan den.
 > Kan i hjælpe??
 >
 > Kasper
 >
 > "Tomas Christiansen" <toc-nospam-01@blikroer.dk> skrev i en meddelelse
 > news:b44dp3$1p51$1@news.cybercity.dk...
 > > S. Melgaard skrev:
 > > Til Kasper:
 > >
 > > Vis lige den kode, hvor du forsøger at regne på kommatalsværdierne, og
 > > hvor det ikke virker.
 > > Jeg kan nemlig slet ikke forstå hvorfor det ikke virker, idet der som
 > > standard benyttes komma (",") i VB på en dansk opsat Windows-maskine.
 > >
 > > Du må altså have gjort noget "specielt" for ikke at få det til at virke!
 > >
 > > -------
 > > Tomas
 > >
 >
 >
 
 
 
 
 |  |  | 
     Tomas Christiansen (05-03-2003) 
 
	
          | |  | Kommentar Fra : Tomas Christiansen
 | 
 Dato :  05-03-03 22:47
 | 
 |  | Kasper skrev:
 > glemte og siget at den er YencEncoded... Men håber i får det til at
 virke...
 
 Ikke umiddelbart. Brawny Lads yProxy ser ikke ud til at kunne klare
 filen, men så vidt jeg kan se, har du smidt en exe-fil.
 
 Det som jeg ønsker at se er en lille kodestump (altså kildetekst, source
 om man vil), hvor du tager en værdi fra, jeg går ud fra at det er en
 tekst-boks, og konverterer denne streng til et tal (implicit eller
 eksplicit).
 
 -------
 Tomas
 
 
 
 |  |  | 
   S. Melgaard (05-03-2003) 
 
	
          | |  | Kommentar Fra : S. Melgaard
 | 
 Dato :  05-03-03 13:32
 | 
 |  | On Wed, 5 Mar 2003 09:50:43 +0100, "Tomas Christiansen"
 <toc-nospam-01@blikroer.dk> wrote:
 
 >Hvad er det egentlig at du vil vise her?
 
 Tja, måske jeg ikke har forstået hans problem, men for mig virker
 det!!
 
 
 Mvh.
 
 Søren
 
 
 |  |  | 
    mhabio (05-03-2003) 
 
	
          | |  | Kommentar Fra : mhabio
 | 
 Dato :  05-03-03 22:15
 | 
 |  | 
 
            Hej
 Du skal gå ind og ændre din komma settings i Internatial Settings under
 kontrol panel. VB overholder regional settings når den viser tal i
 textbokse. VB henter selv disse fra windows.
 Men: Der er en bug i VB5 og VB6.0 når man skifter mellem strings og de
 forskellige tal variabler. Du løser bedst problemet hvis du bruger
 Val(DinStr) da den altid konverterer til punktum. Brug derfor nedenstående
 funktioner til at finde ud af hvad der er Internaltion komma setting og til
 at konvertere fra ',' til '.' inden du bruger Val
 Public Function ReadDecimalSymbol() As String
   ReadDecimalSymbol = Mid$(CStr(1.1), 2, 1)
 End Function
 Public Function ReplaceDecimalSymbol(PassedString) As String
   ReplaceDecimalSymbol = Replace(PassedString, ",", ".")
 End Function
 --
 Regards,
 Mikkel H. Andersen
                                ''~``
                               (\o-o/)
 +------------------------.oooO--(_)--Oooo.---------------------------+
 |                                                                    |
 |           HomePage: http://FoxyLogic.com      |
 |                          .ooO                                      |
 |                          (   )   Oooo.                             |
 +---------------------------\ (----(   )-----------------------------+
                              \_)    ) /
                                    (_/
            
             |  |  | 
     Tomas Christiansen (05-03-2003) 
 
	
          | |  | Kommentar Fra : Tomas Christiansen
 | 
 Dato :  05-03-03 22:41
 | 
 |  | mhabio skrev:
 > Men: Der er en bug i VB5 og VB6.0 når man skifter mellem strings og de
 > forskellige tal variabler.
 
 Kan du beskrive denne bug nærmere?
 
 > Du løser bedst problemet hvis du bruger
 > Val(DinStr) da den altid konverterer til punktum.
 
 Val konverterer ikke til punktum. Val forventer altid at
 decimalskilletegnet er punktum, og ignorerer altså Windows'
 indstillinger.
 
 > Public Function ReplaceDecimalSymbol(PassedString) As String
 >   ReplaceDecimalSymbol = Replace(PassedString, ",", ".")
 > End Function
 
 Husk blot på at denne funktion forventer at Windows er indstillet til
 dansk decimalskilletegn. Den _kan_ risikere at give problemer på en
 engelsk indstillet PC.
 
 -------
 Tomas
 
 
 
 |  |  | 
      mhabio (06-03-2003) 
 
	
          | |  | Kommentar Fra : mhabio
 | 
 Dato :  06-03-03 20:33
 | 
 |  | 
 
            >> Du løser bedst problemet hvis du bruger
 >> Val(DinStr) da den altid konverterer til punktum.
 Du har helt ret, jeg fik det vendt forkert.
 >Val konverterer ikke til punktum. Val forventer altid at
 >decimalskilletegnet er punktum, og ignorerer altså Windows'
 >indstillinger.
 Jeps det er netop 'buggen' i Val funktionen.
 En lille test (håber tabellen bliver pæn):
 International setting    CSng    Val    Text
     ,                                   11       1,1     1.1
     .                                   1.1      1.1     1.1
     ,                                   1,1       1       1,1
     .                                   11        1       1,1
 Udfra dette kan man se at Val(text) vil give det rigtige tal hvis man
 skifter et evt komma ud med punktum inden man konverterer text til tal,
 ganske som du skriver. Det udnytter jeg i ReplaceDecimalSymbol i samarbejde
 med Val.
 >> Public Function ReplaceDecimalSymbol(PassedString) As String
 >>   ReplaceDecimalSymbol = Replace(PassedString, ",", ".")
 >> End Function
 >Husk blot på at denne funktion forventer at Windows er indstillet til
 >dansk decimalskilletegn. Den _kan_ risikere at give problemer på en
 >engelsk indstillet PC.
 Hvis du bruger functionen sammen med Val så får du altid det rigtige
 decimaltal ud af Val functionen, uafhængigt af international settings.
 --
 Regards,
 Mikkel H. Andersen
                                ''~``
                               (\o-o/)
 +------------------------.oooO--(_)--Oooo.---------------------------+
 |                                                                    |
 |        HomePage: http://FoxyLogic.com      |
 |                          .ooO                                      |
 |                          (   )   Oooo.                             |
 +---------------------------\ (----(   )-----------------------------+
                              \_)    ) /
                                    (_/
            
             |  |  | 
       Tomas Christiansen (06-03-2003) 
 
	
          | |  | Kommentar Fra : Tomas Christiansen
 | 
 Dato :  06-03-03 22:47
 | 
 |  | mhabio skrev:
 > >Val konverterer ikke til punktum. Val forventer altid at
 > >decimalskilletegnet er punktum, og ignorerer altså Windows'
 > >indstillinger.
 >
 > Jeps det er netop 'buggen' i Val funktionen.
 
 Det kan vist ikke betegnes som en 'bug', men en 'feature'.
 Man skal blot huske at alle C-konverteringsfunktionerne (CSng, CDbl,
 CCur, ...) kigger på regionale indstiller, og Val gør ikke, som det så
 udmærket er beskrevet i VB's dokumentation:
 
 "You should use the data-type conversion functions instead of Val to
 provide internationally aware conversions from one data type to another.
 For example, when you use CCur, different decimal separators, different
 thousand separators, and various currency options are properly
 recognized depending on the locale setting of your computer."
 
 > >> Public Function ReplaceDecimalSymbol(PassedString) As String
 > >>   ReplaceDecimalSymbol = Replace(PassedString, ",", ".")
 > >> End Function
 ....
 > Hvis du bruger functionen sammen med Val så får du altid det rigtige
 > decimaltal ud af Val functionen, uafhængigt af international settings.
 
 Lad mig komme med et lille eksempel:
 
 Dim s As String
 s = Format(1234.5, "Currency")
 MsgBox s & vbTab & Val(ReplaceDecimalSymbol(s)) + 1
 
 Det går gruelig galt!
 
 Desuden har du slet ikke angivet hvilken type PassedString er, og den
 overføres ByRef, hvilket man kun bør gøre, hvis man ønsker at _ændre_ på
 den aktuelle parameter (for nu at tage det hele med). Jeg ville være
 meget ked af at se den slags i produktionskode, men til "hobbybrug" kan
 det selvfølgelig være udmærket.
 
 -------
 Tomas
 
 
 
 |  |  | 
        mhabio (06-03-2003) 
 
	
          | |  | Kommentar Fra : mhabio
 | 
 Dato :  06-03-03 23:31
 | 
 |  | 
 
            Hej Tomas
 >  Dim s As String
 > s = Format(1234.5, "Currency")
 >  MsgBox s & vbTab & Val(ReplaceDecimalSymbol(s)) + 1
 Den er for søgt, strengen er ikke bare et tal efter turen gennem Format !!.
 Prøv at søge lidt i andre grupper og se hvad der foreslåes der til løsning
 af komma, punktum problematikken. Der er et par svar fra habile gutter som
 du sikker kender hvis du følger med i grupperne.
 Der opstår stadig problemer de andre konvertionsfunctioner i VB, for hvis en
 bruger ikke er klar over hvad der bruges, komma eller punktum, kan cSng,
 Ccur ect ikke bruges uden hjælpefunktioner som tjekker input.
 ByRef, ByVal hmmmmm det kommer an på situationen......, PassedString skal
 klart være as string hvis inputtet kommer fra en tekstboks.
 Hobbybrug........det er klart, jeg lever af noget helt andet...   Anyway, Kaspers oprindelige post (mon han følger med endnu) var omkring
 løsningen til streng til tal konvertering og det er vist løst nu. Ellers er
 jeg spændt på at se din løsning snart, og gerne en der køre i kina og USA
 også. Send endelig noget 'produktionskode' så kan vi alle lære lidt af dig
 GGG.
 --
 Later
 Mikkel H. Andersen
            
             |  |  | 
         Tomas Christiansen (07-03-2003) 
 
	
          | |  | Kommentar Fra : Tomas Christiansen
 | 
 Dato :  07-03-03 00:05
 | 
 |  | mhabio skrev:
 > > s = Format(1234.5, "Currency")
 ....
 > Den er for søgt, strengen er ikke bare et tal efter turen gennem
 Format !!.
 
 Undskyld, undskyld, undskyld. Jeg kom vist til at publicere et af mine
 egne tests!
 Den rigtige kode kommer her:
 
 Dim s As String
 s = Format(1234.5, "Standard")
 MsgBox s & vbTab & Val(ReplaceDecimalSymbol(s)) + 1
 
 > Der opstår stadig problemer de andre konvertionsfunctioner i VB, for
 hvis en
 > bruger ikke er klar over hvad der bruges, komma eller punktum, kan
 cSng,
 > Ccur ect ikke bruges uden hjælpefunktioner som tjekker input.
 
 Er idéen ikke enten at lade VB gøre hele arbejdet for dig, og holde sig
 til C-funktionerne - så virker det hele hver gang - eller at håndtere
 det hele selv, dvs. aflæse betydningen af "," og "." selv klare ærterne
 med Val og andre hjælpemidler?
 Den første metode er vel i de fleste tilfælde at foretrække? Hvorfor
 selv bruge krudt på noget som er indbygget i VB?
 
 > ByRef, ByVal hmmmmm det kommer an på situationen......, PassedString
 skal
 > klart være as string hvis inputtet kommer fra en tekstboks.
 
 Tja, men hvorfor angiver du det så ikke, i stedet for at lade det være
 en variant. Du har dog sat type på funktionsværdien.
 
 > Anyway, Kaspers oprindelige post (mon han følger med endnu) var
 omkring
 > løsningen til streng til tal konvertering og det er vist løst nu.
 
 Lad os prøve at spørge: "Kasper, har du fået løst dit problem, eller har
 vi bare forvirret dig på et højere plan?"
 
 > jeg spændt på at se din løsning snart, og gerne en der køre i kina og
 USA
 > også.
 
 Løsning er kun at bruge C-funktionerne og lade folk taste i det format
 som deres computer nu en gang er sat op til.
 Samme løsning er valgt i f.eks. Excel, og det virker så vidt jeg ved i
 ret mange lande!
 
 -------
 Tomas
 
 
 
 |  |  | 
          Kasper (07-03-2003) 
 
	
          | |  | Kommentar Fra : Kasper
 | 
 Dato :  07-03-03 09:03
 | 
 |  | "Tomas Christiansen" <toc-nospam-01@blikroer.dk> skrev i en meddelelse
 news:b48k4e$vb6$1@news.cybercity.dk...
 > mhabio skrev:
 > Lad os prøve at spørge: "Kasper, har du fået løst dit problem, eller har
 > vi bare forvirret dig på et højere plan?"
 Ja Ja... Jeg følger med endnu, men synes ikke rigtig at kunne få det til at
 fungerer... Den kode du kommere med her:
 Dim s As String
 s = Format(1234.5, "Standard")
 MsgBox s & vbTab & Val(ReplaceDecimalSymbol(s)) + 1
 tror jeg ikke VB 5.0 kan finde ud af. den kommer med en fejl som hedder:
 Compile Errror
 
 Sub or Function not defined
 
 Men i det store hele er jeg lidt forvirret, da jeg som sagt er
 nybegynder....
 
 Men ellers tak for de mange svar...
 Kasper
 
 
 
 
 |  |  | 
           mhabio (07-03-2003) 
 
	
          | |  | Kommentar Fra : mhabio
 | 
 Dato :  07-03-03 22:22
 | 
 |  | Hej Kasper,
 
 Brug nedenstående sammen med tre Text bokse og en knap. Hvis du ikke bruger
 1000-adskiller så virker denne kode:
 
 Private Sub Command1_Click()
 Tal1 = Val(ReplaceDecimalSymbol(Text1.Text))
 Tal2 = Val(ReplaceDecimalSymbol(Text2.Text))
 Tal3 = Tal1 + Tal2
 Text3.Text = Tal3
 End Sub
 
 Private Function ReplaceDecimalSymbol(PassedString As String) As String
 ReplaceDecimalSymbol = Replace(PassedString, ",", ".")
 End Function
 
 --
 Regards,
 Mikkel H. Andersen
 
 
 
 
 |  |  | 
            Tomas Christiansen (08-03-2003) 
 
	
          | |  | Kommentar Fra : Tomas Christiansen
 | 
 Dato :  08-03-03 01:05
 | 
 |  | mhabio skrev:
 > Brug nedenstående sammen med tre Text bokse og en knap. Hvis du ikke
 bruger
 > 1000-adskiller så virker denne kode:
 >
 > Private Sub Command1_Click()
 >  Tal1 = Val(ReplaceDecimalSymbol(Text1.Text))
 >  Tal2 = Val(ReplaceDecimalSymbol(Text2.Text))
 >  Tal3 = Tal1 + Tal2
 >  Text3.Text = Tal3
 > End Sub
 >
 > Private Function ReplaceDecimalSymbol(PassedString As String) As
 String
 >   ReplaceDecimalSymbol = Replace(PassedString, ",", ".")
 > End Function
 
 Eller brug nedenstående kode, som virker med tusind-adskiller og i alle
 de lande hvor VB og Windows kan bruges:
 
 Text3.Text = CDbl(Text1.Text) + CDbl(Text2.Text)
 
 Kan det næsten siges mere enkelt og klart?
 
 -------
 Tomas
 
 
 
 |  |  | 
             mhabio (08-03-2003) 
 
	
          | |  | Kommentar Fra : mhabio
 | 
 Dato :  08-03-03 10:19
 | 
 |  | >Eller brug nedenstående kode, som virker med tusind-adskiller og i alle
 >de lande hvor VB og Windows kan bruges:
 
 >   Text3.Text = CDbl(Text1.Text) + CDbl(Text2.Text)
 
 >Kan det næsten siges mere enkelt og klart?
 
 Lige undtaget tilfældet hvor en bruger ikke er klar over om det er komma
 eller punktum der bruges som seperator. Men det kan man jo lige tjekke inden
 .. .. ... ....
 
 Jeg har rodet med dette problem i forbindelse med nogle konfigureringsfiler
 til et program og når disse filer er lavet her i DK og så skal læses ind i
 systemer rundt om i verden, så er du nød til at 'lappe' lidt på enten CSng,
 CDbl eller Val.
 
 Nu er den her vist ikke længere, Kasper du har fået to løsninger, elegante
 eller ej, så løser de dit problem. Om ikke andet så har de lært os at input
 validering er vigtigt. I den nye version af VB (.Net) skulle der være kommet
 mere styr på disse problemer (jeg har dog ikke hands on erfaring).
 
 --
 Regards,
 Mikkel H. Andersen
 
 
 
 
 |  |  | 
              Tomas Christiansen (08-03-2003) 
 
	
          | |  | Kommentar Fra : Tomas Christiansen
 | 
 Dato :  08-03-03 19:24
 | 
 |  | mhabio skrev:
 > Nu er den her vist ikke længere, Kasper du har fået to løsninger,
 elegante
 > eller ej, så løser de dit problem. Om ikke andet så har de lært os at
 input
 > validering er vigtigt.
 
 Så sandt som det er sagt. EOD.
 
 -------
 Tomas
 
 
 
 |  |  | 
 |  |