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 ?
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 '...
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ä.
mitä tarkoittaa castaus ?
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.
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ä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.