Avatar billede knaste Nybegynder
19. marts 2007 - 14:52 Der er 6 kommentarer og
2 løsninger

TChart + floating point med komma! Hvorfor det?

Hej,

Angående TChart:

jeg bruger denne kode til at aflæse værdierne i Charten, som befinder sig under curseren:

tmpX ,tmpY, ValY: double;

Series1.GetCursorValues(tmpX,tmpY);
ValY := StrToFloat(Series1.GetVertAxis.LabelValue(tmpY));


Den brokker sig over at 1,092.184 ikke er et gyldigt floating point tal, når musen bevæges.
Jeg går ud fra at det er fordi tallet indeholder et komma (tusind separator).

Men hvorfor indeholder tallet et komma, når Delphi selv har hentet tallet ved hjælp af linien
Series1.GetCursorValues(tmpX,tmpY);?
Avatar billede vallemanden Nybegynder
19. marts 2007 - 14:58 #1
tusind separator er som real . og IKKE , da et , vil angive f.eks øre
Avatar billede knaste Nybegynder
19. marts 2007 - 15:07 #2
Ved double er tusind separator et , så vidt jeg ved (i Delphi).

Men som sagt, hvorfor henter Delphi en værdi ved hjælp af linien
Series1.GetCursorValues(tmpX,tmpY);.
som ikke er gyldig?

Jeg kan åbenbart ikke bruge et tal med tusind separator i linien
ValY := StrToFloat(Series1.GetVertAxis.LabelValue(tmpY));
så hvordan ungår jeg problemet?
Avatar billede vallemanden Nybegynder
19. marts 2007 - 15:25 #3
a:=StringReplace('variabel','.','',[rfReplaceAll, rfIgnoreCase])
b:=StringReplace('variabel',',','',[rfReplaceAll, rfIgnoreCase])
Avatar billede vallemanden Nybegynder
19. marts 2007 - 15:26 #4
det er ikke delphi der altid bestemmer, windows gør også :)
Avatar billede knaste Nybegynder
19. marts 2007 - 15:56 #5
Nu har jeg lavet folgende test, som fjerner kommaet:

Series1.GetCursorValues(tmpX,tmpY);
a:=StringReplace(FloatToStr(tmpY),',','',[rfReplaceAll, rfIgnoreCase]);
ValY := StrToFloat(Series1.GetVertAxis.LabelValue(StrToFloat(a)));

Men den melder samme fejl, da kommaet bliver tilføjet igen i denne linie:

ValY := StrToFloat(Series1.GetVertAxis.LabelValue(StrToFloat(a)));

Skal man måske generelt fortælle Delphi, at den ikke skal arbejde med tusind separatorer?
Avatar billede vallemanden Nybegynder
19. marts 2007 - 16:04 #6
hmmm, det skulle den normalt heller ikke gøre.
men du skal nok fjerne . også

Series1.GetCursorValues(tmpX,tmpY);
a:=StringReplace(FloatToStr(tmpY),',','',[rfReplaceAll, rfIgnoreCase]);
b:=StringReplace(a,'.','',[rfReplaceAll, rfIgnoreCase])ValY := StrToFloat(Series1.GetVertAxis.LabelValue(StrToFloat(b)));
Avatar billede knaste Nybegynder
19. marts 2007 - 16:44 #7
Så har jeg jo heller ingen komma separator. Den har jeg absolut brug for :)
Avatar billede knaste Nybegynder
19. marts 2007 - 18:08 #8
Jeg løste det ved at sætte ThousandSeparator til #0 før koden,
og derefter sætte den tilbage igen.

Vi deler point.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester