Avatar billede dkklein Nybegynder
18. december 2001 - 08:46 Der er 7 kommentarer og
1 løsning

Floating point tal

Jeg har følgende problem:

Et program scanner en log fil og hiver nogle tal ud. Deri blandt nogle tal med deciamler.

Tallet har formatet 1.234 med et punktum som decimal punkt. I øjeblikket laver jeg en hardcoedet konvertering af punktummet til et komma hvorefter jeg bruger strtofloat for at lave strengen om til et floating point tal.

Mit problem er at hvis programmet anvendes på en pc hvor nummerformatet i regional settings er sat til at decimal punktet skal være et punktum så fejler programmet fordi 1,234 ikke er et validt floating point tal.

Hvilken funtion skal jeg bruge til at konvertere en tekst streng i formatet \"1.234\" til et validt floating point tal uanset hvordan regional settings er sat?

MVH Tommy

Avatar billede stoney Nybegynder
18. december 2001 - 09:57 #1
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Text := StringReplace(memo1.Text, \',\', \'.\', [rfReplaceAll]);
end;

Stoney
Avatar billede dkklein Nybegynder
18. december 2001 - 10:02 #2
Nej det er ikke helt det jeg vil. For det er lige præcis det jeg allerede gør som ikke supporterer forskellige settings i regional settings.

Eks. hvis programmet kører på en dansk opsat pc så skal tallet konverteres til 1,234

hvis programmet derimod kører på en amerikansk opsat pc som bruger punktum sum decimal punkt så skal tallet konverters til 1.234 ellers fungerer efterfølgende beregninger ikke korrekt.
Avatar billede stoney Nybegynder
18. december 2001 - 10:21 #3
Du kan teste hvad de kører inden du gør et eller andet

procedure TForm1.Button1Click(Sender: TObject);

begin
if  (DecimalSeparator = \'.\') and (ThousandSeparator = \',\') then
showmessage(\'US\');
if  (DecimalSeparator = \',\') and (ThousandSeparator = \'.\') then
showmessage(\'DK\');

end;
---------------------------
Eller du kan sætte dem selv temp. og senere sætte dem tilbage

procedure SetLocale;
begin
DecimalSeparator := \'.\';
ThousandSeparator : = \',\';
ShortDateFormat := \'mm/dd/yy\';
end;
-----------

Stoney
Avatar billede dkklein Nybegynder
18. december 2001 - 11:17 #4
Øv, min kommentar forsvandt...

Nå men har jeg opfattet korrekt at ovenstående forudsætter at tallene indtastes manuelt via et input felt.

Det jeg har brug for er i forbindelse med indlæsning af data fra en fil.

Ville det så være TForm1.DecimanSeparator jeg skulle modificere / checke?
Avatar billede stoney Nybegynder
18. december 2001 - 11:21 #5
Inden du scanner din log tjekker du hvilken decimal og tusind-separator PC\'en kører med.

Hvis den kører US scanner du på en måde og hvis den kører DK scanner du på en anden måde.

Stoney

Avatar billede stoney Nybegynder
18. december 2001 - 11:25 #6
Lad os sige du har en procedure der hedder scanlogUS og scanlogDK

procedure TForm1.Button1Click(Sender: TObject);

begin
if  (DecimalSeparator = \'.\') and (ThousandSeparator = \',\') then
scanlogUS;
if  (DecimalSeparator = \',\') and (ThousandSeparator = \'.\') then
scanlogDK;

end;

Stoney
Avatar billede dkklein Nybegynder
18. december 2001 - 13:14 #7
Jeg tester i aften og vender tilbage.
Avatar billede dkklein Nybegynder
18. december 2001 - 18:19 #8
Yep det funker. Tak for hjælpen og værsgo.
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