Avatar billede aagaard93 Novice
13. september 2008 - 23:21 Der er 10 kommentarer

Kommatal med IntToStrDef

kan man ikke lave kommatal men IntToStrDef?
eller er der ikke noget andet der kan man kan lave kommatal med? udover Float???
Avatar billede michaelthomsendk Nybegynder
13. september 2008 - 23:31 #1
Hvad er der galt med FloatToStr ?
Avatar billede aagaard93 Novice
13. september 2008 - 23:43 #2
jeg kan ikke lægge dem sammen i en label til sidst, for så skriver den noget med at der ikke kan floates med den label

fx: man kan ikke lægge disse 2 sammen med float: 2.500 / 1000

den kan ikke finde ud af det når der er punktum (.)
Avatar billede michaelthomsendk Nybegynder
14. september 2008 - 00:21 #3
Er 2.500 2½ eller 2500 ?
Avatar billede aagaard93 Novice
14. september 2008 - 00:27 #4
2500
Avatar billede mbsnet Nybegynder
14. september 2008 - 01:26 #5
//Der findes også en "currToStrF" som kan konvertere extended tal

function formatDecimals(const aValue:extended;const decimals:byte=2):string;
begin
result:=currToStrF(aValue,ffFixed,decimals)
end;
Avatar billede mbsnet Nybegynder
14. september 2008 - 01:29 #6
Hvis det er fordi du prøver at lægge dine strings sammen til sidst, bør du lægge dem sammen før du konverterer til string. (Evt imens du konverterer)
Avatar billede michaelthomsendk Nybegynder
14. september 2008 - 09:54 #7
Du kunne jo fjerne punktummerne:

  Edit1.Text := IntToStr(
    StrToInt(StringReplace('2.500', '.', '', [rfReplaceAll])) +
    StrToInt(StringReplace('1000', '.', '', [rfReplaceAll])));
Avatar billede hrc Mester
15. september 2008 - 00:09 #8
Jeg skal love for du kager noget rundt i det her. En god hjælp til os er at stille præcise spørgsmål. Du kunne f.eks. have læst korrektur på dit spørgsmål og måske endda kopieret lidt kode med. Så kunne mbsnet, michael og jeg sandsynligvis have sparet nogle kommentarer.

Endelig - og det er fordi klokken er mange, så kunne du læse en bog om programmering først. Dine spørgsmål er billige points for os for det er helt basale ting der spørges om.

Hvad spørgsmålet angår:

Hvis du bruger den globale variabel DecimalSeparator kan du se hvilket tegn den pågældende maskine har som decimalseparator. Skal det være fint så har Delphi en struktur der hedder TFormatSettings. Bruger du den (og GetFormatSettings), kan du styre hvad der skal adskille heltal fra decimaldelen (også i tråde).

Endelig, og det har jeg vist nævnt før, brug KeyPressed eventet:

procedure TForm1.Edit1OnKeyPressed(Sender: TObject; var Key: char);
begin
  if Key >= #32 then
    if not (Key in ['0'..'9',DecimalSeparator,'-']) then
      Key := #0;
end;

På den måde forhindrer du en stor del af fejlindtastningerne. Der skal mere kode til at bremse at brugeren trykker på decimalseparatortegnet flere gange. Den komplette kode kan jeg eventuelt klistre ind.
Avatar billede borrisholt Novice
15. september 2008 - 21:21 #9
procedure TForm1.Edit1OnKeyPressed(Sender: TObject; var Key: char);
begin
  if Key >= #32 then
    if not (Key in ['0'..'9',DecimalSeparator,'-']) then
      Key := #0;

  if Key = DecimalSeperator then
    if Pos(DecimalSeperator, (Sender as TEdit).Text9 > 0 then
      Key := #0;
end;

Jens Borrisholt
Avatar billede borrisholt Novice
16. september 2008 - 08:09 #10
Hvis minus kun må optræde engang så prøv det her :
procedure TForm1.Edit1OnKeyPressed(Sender: TObject; var Key: char);
begin
  if Key >= #32 then
    if not (Key in ['0'..'9',DecimalSeparator,'-']) then
      Key := #0;

  if Key = DecimalSeperator then
    if Pos(DecimalSeperator, (Sender as TEdit).Text) > 0 then
      Key := #0;

  if Key = '-' then
    if Pos('-', (Sender as TEdit).Text) > 0 then
      Key := #0;
end;

Der efter ved du faktisk det er et gyldigt kommatal som står i dit edit felt... Med ovennævnte løsning kan du endda få flere editfelter til at bruge den samme onchange event.

Jens BOrrisholt
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

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