AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

StrToFloat klappt nur mit ','

Ein Thema von Todd · begonnen am 13. Jul 2007 · letzter Beitrag vom 16. Jul 2007
Antwort Antwort
Seite 1 von 2  1 2      
Todd

Registriert seit: 27. Jun 2007
25 Beiträge
 
#1

StrToFloat klappt nur mit ','

  Alt 13. Jul 2007, 20:16
Hallo zusammen,

wenn ich einen String in einen Double Wert konvertieren will, klappt das nur wenn der Fließkommawert als Trennzeichen ein Komma enthält. Ich habe aber ausschließlich Zahlen, die punktweise (getrennt) werden.
Die stehen in einem TStringGrid und es muss auf Benutzerfehleingaben abgefangen werden. Deshalb prüfe ich mit try and catch ob sich der String in einen float Wert überführen kann. Das klappt aber nicht bei z.b. 1.2 sondern nur bei 1,2...

Hilfe...
  Mit Zitat antworten Zitat
HalloDu

Registriert seit: 24. Apr 2006
Ort: Oelde
267 Beiträge
 
Delphi 2009 Professional
 
#2

Re: StrToFloat klappt nur mit ','

  Alt 13. Jul 2007, 20:17
Um mal ne schlampige Verainte zu nenneb (gibt bestimmt ne effizientere ):
ersetzt doch einfach alle Punkte durch Kommata und mach dann strtofloat
Frederic H.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: StrToFloat klappt nur mit ','

  Alt 13. Jul 2007, 20:19
Oder Setzte die Konstanten DecimalSeparator/ThousandSeparator temporar oder verwende, so vorhanden die überladene Version mit übergabe des Formats.
Markus Kinzler
  Mit Zitat antworten Zitat
HalloDu

Registriert seit: 24. Apr 2006
Ort: Oelde
267 Beiträge
 
Delphi 2009 Professional
 
#4

Re: StrToFloat klappt nur mit ','

  Alt 13. Jul 2007, 20:21
Siehst du das meinte ich mit effizienterer Variante, die ich halt gerade nicht im Kopf hatte
Frederic H.
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#5

Re: StrToFloat klappt nur mit ','

  Alt 13. Jul 2007, 20:30
Zitat von mkinzler:
oder verwende, so vorhanden die überladene Version mit übergabe des Formats.
Hi,
das wäre die sauberste Lösung. Beim Überschreiben des Wertes in der globalen Variable bekommst Du immer dann ein Problem, wenn jmd. anderes den selben Gedanken hatte (und erfahrungsgemäß passiert sowas früher oder später mal). Deshalb einfach eine lokale FormatSettings Variable nehmen und die Eigenschaft ändern:

Delphi-Quellcode:
var formatSettings: TFormatSettings;
begin
  GetLocaleFormatSettings(GetUserDefaultLCID, formatSettings);
  formatSettings.DecimalSeparator := '.';

  f := StrToFloat(s, formatSettings);
end;
Dabei wird hier einfach die lokale Einstellung des Benutzers verwendet, der Dezimalseperator durch einen Punkt ersetzt und dann eben die überladene StrToFloat-Funktion aufgerufen. Analog sieht es aus, wenn Du ein Float in einen String konvertieren willst, wobei dann im String das entsprechende Dezimaltrennzeichen verwendet wird.

Gruß Der Unwissende
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: StrToFloat klappt nur mit ','

  Alt 13. Jul 2007, 20:34
Zitat:
Beim Überschreiben des Wertes in der globalen Variable bekommst Du immer dann ein Problem, wenn jmd. anderes den selben Gedanken hatte
Das Verändern der Konstante ändert nicht die Systemeinstellungen, sondern wirkt nur in dem aktiven Programm
Markus Kinzler
  Mit Zitat antworten Zitat
Todd

Registriert seit: 27. Jun 2007
25 Beiträge
 
#7

Re: StrToFloat klappt nur mit ','

  Alt 13. Jul 2007, 20:44
super...
hat funktioniert.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#8

Re: StrToFloat klappt nur mit ','

  Alt 14. Jul 2007, 13:54
Zitat von mkinzler:
Zitat:
Beim Überschreiben des Wertes in der globalen Variable bekommst Du immer dann ein Problem, wenn jmd. anderes den selben Gedanken hatte
Das Verändern der Konstante ändert nicht die Systemeinstellungen, sondern wirkt nur in dem aktiven Programm
Ja, und leider setzen manche VCL Komponenten diesen einfach wieder zurück. Afair sind manche Datenbankenkomponenten leider so programmiert. Mit dem verändern vom DecimalSeparator habe ich einer Anwendung massive Probleme gehabt, da zwischendurch dieser wieder zurück gesetzt wurde. Dabei hatte die App das Umsetzen beim Start durchgeführt und dann nirgendwo wieder angefasst. Es waren nur Standardkomponenten und ein paar eigene vorhanden (welche dies auch nicht geändert haben). Nun nutze ich einfach die ersetzen Methode:

Delphi-Quellcode:
function MyStrToFloat(AString: string): double;
begin
  AString := StringReplace(AString, '.', DecimalSeparator, [rfIgnoreCase, rfReplaceAll]);
  AString := StringReplace(AString, ',', DecimalSeparator, [rfIgnoreCase, rfReplaceAll]);
  result := StrToFloat(AString);
end;
Voraussetzung für diese Methode: es gibt keine Tausender-Trennzeichen.
  Mit Zitat antworten Zitat
Tommy82

Registriert seit: 12. Dez 2005
61 Beiträge
 
Delphi 2007 Professional
 
#9

Re: StrToFloat klappt nur mit ','

  Alt 14. Jul 2007, 16:32
Hallo,

falls es doch einen Tausender-Trennpunkt gibt, einfach alle komma´s und Punkte raus, dann "StrToFloat" und anschließend nochmal durch 100 teilen.
Da kommt man auch aufs richtige Ergebnis, unabhängig von Tausenderpunk

mfg

Tommy82
  Mit Zitat antworten Zitat
Benutzerbild von GuenterS
GuenterS

Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: StrToFloat klappt nur mit ','

  Alt 14. Jul 2007, 17:46
Zitat von Tommy82:
Hallo,

falls es doch einen Tausender-Trennpunkt gibt, einfach alle komma´s und Punkte raus, dann "StrToFloat" und anschließend nochmal durch 100 teilen.
Da kommt man auch aufs richtige Ergebnis, unabhängig von Tausenderpunk

mfg

Tommy82
Das ist sicher eine ganz tolle Idee, vor allem weil wir IMMER 2 Nachkommastellen haben...
Günter
Pünktlichkeit ist die Fähigkeit vorherzusagen um wieviel sich der Andere verspäten wird.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz