AGB  ·  Datenschutz  ·  Impressum  







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

Komma/Punkt Dezimalseperator

Ein Thema von DoktorD · begonnen am 20. Okt 2006 · letzter Beitrag vom 21. Okt 2006
Antwort Antwort
Seite 1 von 3  1 23      
DoktorD

Registriert seit: 13. Dez 2005
153 Beiträge
 
#1

Komma/Punkt Dezimalseperator

  Alt 20. Okt 2006, 15:24
Hi. Habe ein Programm geschreiben, das beim Starten aus einer INI-Datei Werte einliest (z.B. 1,50) und dann mit "StrToFloat" umwandelt.
Das läuft soweit alles super aber nun habe ich as Programm bei einem Freund ausprobiert (anderer Rechner) und da kommen beim Starten Fehlermeldungen.

"... ist kein gültiger Gleitkommawert"

Also ich hab da sowas in meiner Erinnerung, dass man im Windows den Dezimalseperator umstellen kann.

Wie kann ich dieses Problem aber nun lösen? Kann diese Umstellung über eine Funktion realisieren?
  Mit Zitat antworten Zitat
Maja Jessica

Registriert seit: 16. Apr 2005
Ort: Dortmund
95 Beiträge
 
Delphi 4 Standard
 
#2

Re: Komma/Punkt Dezimalseperator

  Alt 20. Okt 2006, 15:30
Hi

Hilft Dir dieses?:
Decimalseparator

MJ
  Mit Zitat antworten Zitat
DoktorD

Registriert seit: 13. Dez 2005
153 Beiträge
 
#3

Re: Komma/Punkt Dezimalseperator

  Alt 20. Okt 2006, 15:33
Das kenn ich schon, damit kann ich das ja nur einmal umstellen, und dann läuft es ja auf meinem Rechner nicht mehr, da ich ja dann den Wert den ich einlese in einen in 2.50 Umwandeln müsste.
  Mit Zitat antworten Zitat
Maja Jessica

Registriert seit: 16. Apr 2005
Ort: Dortmund
95 Beiträge
 
Delphi 4 Standard
 
#4

Re: Komma/Punkt Dezimalseperator

  Alt 20. Okt 2006, 15:48
Hi,

also kein Problem, da du ihn ja auch auslesen
ShowMessage(decimalseparator); und darauf reagieren kannst. (pos, replace)

MJ
  Mit Zitat antworten Zitat
Leonard

Registriert seit: 12. Okt 2005
Ort: Lutherstadt Eisleben
64 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Komma/Punkt Dezimalseperator

  Alt 20. Okt 2006, 15:56
Hallo,

Wenn ich mich recht erinnere, könntest auch die StrToFloat nehmen, in der du die FormatSettings mit angibst. So kannst du angeben, welcher DecimalSeparator verwendet wird. Dies sollte dann unabhängig von den Windoseinstellungen sein.

mfg Leonard
Tobias
  Mit Zitat antworten Zitat
DoktorD

Registriert seit: 13. Dez 2005
153 Beiträge
 
#6

Re: Komma/Punkt Dezimalseperator

  Alt 20. Okt 2006, 15:57
Kann ich denn irgendwie die Einstellungen bei Regions- und Sprachoptionen nur für mein Programm ändern. Geht das überhaupt???
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: Komma/Punkt Dezimalseperator

  Alt 20. Okt 2006, 15:58
ich mach das immer so:
- das StrToFloat in einen try..except reinsetzen
- bei except dann den DecimalSeperator umstellen (vorher den alten Wert merken)
- dann nochmal StrToFloat
- dann den DezimalSeperator wieder zurückstellen
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
Benutzerbild von OldGrumpy
OldGrumpy

Registriert seit: 28. Sep 2006
Ort: Sandhausen
941 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Komma/Punkt Dezimalseperator

  Alt 20. Okt 2006, 16:01
Eleganter ist es, sich die aktuellen Landeseinstellungen in ein Formattemplate zu holen und die dann für die neuere Variante von StrToFloat zu verwenden:

Delphi-Quellcode:
uses SysUtils;
...
var
  fs :TFormatSettings;
  MeinString :String;
  MeineZahl :Double;
...
begin
...
  GetLocaleFormatSettings(GetUserDefaultLCID, fs);
  MeineZahl:=StrToFloat(MeinString, fs);
...
EDIT:
Nachtrag: Natürlich ist es so auch möglich, Zahlen die immer im gleichen Format vorliegen, unabhängig von den aktuellen Einstellungen des Rechners umzuwandeln. Dafür gibt man einfach bei GetLocaleFormatSettings seine eigene LCID an. Die kann man ja einfach per GetUserDefaultLCID ermitteln

EDIT:
Nachtrag 2: Ich hoffe, die Erklärung ist jetzt nicht allzu wirr. Für die Anwendung "wandle eine beliebige eingegebene Kommazahl so um wie der User es erwartet" gilt meine obige Version, für die Aufgabe "wandle Zahlen aus einem Datenfile unabhängig von der Ländereinstellung des Rechners" gilt die Empfehlung aus Nachtrag 1
"Tja ja, das Ausrufezeichen... Der virtuelle Spoiler des 21. Jahrhunderts, der Breitreifen für die Datenautobahn, die k3wle Sonnenbrille fürs Usenet. " (Henning Richter)
  Mit Zitat antworten Zitat
Leonard

Registriert seit: 12. Okt 2005
Ort: Lutherstadt Eisleben
64 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Komma/Punkt Dezimalseperator

  Alt 20. Okt 2006, 16:05
Hallo,

Zitat von OldGrumpy:
Delphi-Quellcode:
...
  GetLocaleFormatSettings(GetUserDefaultLCID, fs);
  MeineZahl:=StrToFloat(MeinString, fs);
...
Dann aber noch
  fs.DecimalSeparator := ','; zwischen die beiden Zeilen setzen, sonst nimmt er wieder nur die Windowseinstellungen.
Tobias
  Mit Zitat antworten Zitat
Benutzerbild von OldGrumpy
OldGrumpy

Registriert seit: 28. Sep 2006
Ort: Sandhausen
941 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Komma/Punkt Dezimalseperator

  Alt 20. Okt 2006, 16:06
Leonard, lies bitte die beiden Nachträge in meinem Post

Und umstellen braucht man für diese Aufgabe ansonsten auch nix Man muss sich halt nur das Formattemplate holen was zu den zu wandelnden Daten passt:

User gibt Zahl ein wie gewohnt:
GetLocaleFormatSettings(GetUserDefaultLCID, fs); //berücksichtigt Komma- und Tausendertrennzeichen wie der User es auf seinem Rechner gewohnt ist Programm benutzt ein Datenfile mit Kommazahlen im Format für ein bestimmtes Land:
GetLocaleFormatSettings(1033, fs); //holt zum Beispiel das Template für Deutschland Nun klarer?
"Tja ja, das Ausrufezeichen... Der virtuelle Spoiler des 21. Jahrhunderts, der Breitreifen für die Datenautobahn, die k3wle Sonnenbrille fürs Usenet. " (Henning Richter)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 02:34 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