Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: [VB6] ongelmia desimaalierottimen kanssa

jaanas [25.03.2009 13:16:49]

#

Hei,
ohjelmani toimii oikein, kun desimaalierotin on piste. Kun vaihdan desimaalierottimen pilkuksi, tulee yhden aliohjelman kutsussa ongelmia. Aliohjelmaan välitettävä parametri on oikein, mutta kun debuggaan aliohjelmaa ja katson parametrin arvoa, se on muuttunut tavattoman suureksi luvuksi, pilkkua ei ole tajuttu desimaalierottimeksi. Mistähän tämä johtuu ja miten asian voisi korjata ?

neau33 [25.03.2009 17:05:50]

#

Heippa jaanas!

Tutustu aiheeseen Globalization and Localization

käyttelen itse oldfashion viritelmää...

'...
If Not (Application.CurrentCulture. _
EnglishName.Index("Finland") > -1) Then
  If CStr(arvo).IndexOf(",") Then
    If TypeOf(arvo) Is String Then
      arvo = Replace(arvo.ToString, ",", ".")
    Else
      arvo = Val(Replace(arvo.ToString, ",", "."))
    End If
  End If
End If
'...

Grez [25.03.2009 18:51:13]

#

Vb6:ssa Val ja Str käyttävät desimaalierottimena aina pistettä. Muut muuntofunktiot (CDbl, CLng, CCur, CStr, jne.) sekä (automaattiset) castaukset käyttävät käyttäjän asetusten mukaisia erottimia.

.Netissä lokalisaatio on paljon selkeämmin rakennettuna, ja onkin hieman vaikea keksiä mitä iloa tuosta Nean linkittämästä aihetta .Net:n kannalta käsittelevästä artikkelista tai .Net -esimerkistä on VB6-käytössä.

jaanas [26.03.2009 08:27:57]

#

mitä tarkoittaa castaus ?

Merri [26.03.2009 09:37:32]

#

Hmm, minulle tuosta VB:n automaattisesta muuttujatyyppien "sovittamisesta" on käytetty termiä coercion. Eikös castauksessa vain suoraan muuteta muuttujatyyppi muuttamatta itse dataa millään tavalla?

Juju kuitenkin jaanakselle: VB muuttaa epäyhteensopivat muuttujatyypit yhteensopiviksi automaattisesti. Jos sinulla on vaikka String "1" ja Integer 1 ja ynnäät ne yhteen, niin nämä täytyy muuttaa jollakin tavalla yhteensopiviksi. Tästä on kuitenkin se haitta, että on tapauksia joissa ei ole täysin selvää, millainen muutos tehdään:

Dim Muuttuja As String

Muuttuja = "1" + 1

MsgBox Muuttuja

Tässä mahdollisia lopputuloksia on kaksi: merkkijono, jossa on "2" tai merkkijono, jossa on "11". Tämmöisten ongelmien takia on hyvä aina pyrkiä määrittämään oikeat muuttujatyypit sekä käyttää oikeita asiaankuuluvia muuttujatyyppejä. Esim. merkkijonojen käyttö matemaattisiin laskutoimituksiin on aina turhaa, on paljon parempi käyttää Longia, Doublea, Currencyä jne. tarpeen mukaan.

Grez [26.03.2009 19:17:25]

#

Castauksella tarkoitan siis sitä, että toisen tyypin A muuttuja tungetaan tyypin B muuttujaan. Tyyliin

Dim Luku as Double, Teksti as String
Luku = 50.738
Teksti = Luku 'Tekstistä tulee suomalaisilla asetuksilla "50,738"

Teksti = "372,20"
Luku = Teksti 'Luvusta tulee suomalaisilla asetuksilla 372.2

Voi olla että termi on väärä.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta