AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Länderunabhängige Konvertierung von Kommazahlen<->String
Thema durchsuchen
Ansicht
Themen-Optionen

Länderunabhängige Konvertierung von Kommazahlen<->String

Ein Thema von Dani · begonnen am 3. Mai 2007 · letzter Beitrag vom 4. Mai 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#1

Länderunabhängige Konvertierung von Kommazahlen<->Stri

  Alt 3. Mai 2007, 20:22
Hallo,

wie kann man möglichst einfach eine Gleitkommazahl zu einem menschenlesbaren String konvertieren, und das unabhängig von den Ländereinstellungen des Benutzers (sprich DecimalSeparator)? Es soll auch keine Genauigkeit verloren gehen.

Was ich natürlich nicht machen will, ist, DecimalSeparator einfach zu überschreiben. Vorher würde ich FloatToStr / StrToFloat reimplementieren, allerdings ist der Assemblercode der RTL eher abschreckend...

Gruß
Dani H.
At Least I Can Say I Tried
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Länderunabhängige Konvertierung von Kommazahlen<->

  Alt 3. Mai 2007, 20:26
Es gibt doch auch die varinate mit dem Format als Parameter
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Länderunabhängige Konvertierung von Kommazahlen<->

  Alt 3. Mai 2007, 20:29
...welche bei der Wahl des Dezimaltrennzeichens leider auch die Ländereinstellungen beachtet
Dani H.
At Least I Can Say I Tried
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Länderunabhängige Konvertierung von Kommazahlen<->

  Alt 3. Mai 2007, 20:40
Nein: function StrToFloat(const S: string; const FormatSettings: TFormatSettings): Extended;
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Länderunabhängige Konvertierung von Kommazahlen<->

  Alt 3. Mai 2007, 20:50
Kennt mein Delphi6 leider nicht, schade.
Dani H.
At Least I Can Say I Tried
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Länderunabhängige Konvertierung von Kommazahlen<->

  Alt 3. Mai 2007, 20:57
Was spricht eigentlich gegen die Veränderung der Konstante(n)?
Markus Kinzler
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: Länderunabhängige Konvertierung von Kommazahlen<->

  Alt 3. Mai 2007, 21:01
Hallo Dani,

Zitat von Dani:
wie kann man möglichst einfach eine Gleitkommazahl zu einem menschenlesbaren String konvertieren, und das unabhängig von den Ländereinstellungen des Benutzers (sprich DecimalSeparator)? Es soll auch keine Genauigkeit verloren gehen.
die einfachste Möglichkeit ist wohl die Prozedur Str():

Delphi-Quellcode:
var
  s: string;
  e: Extended;
  code: Word;

begin
  Str(Pi:0:18, s);
  Val(s, e, code);
end;
Damit wird eine Zahl im internen Format geschrieben - so dass sie mittels Read() auch einfach wieder gelesen werden kann.

Was den umgekehrten Weg (StrToFloat) angeht, so musst du mal in der Online Help nachsehen, in welcher Unit diese Funktion bei dir implementiert ist. Bei mir ist es SysUtils.

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Länderunabhängige Konvertierung von Kommazahlen<->

  Alt 3. Mai 2007, 21:11
Vielleicht werden an anderer Stelle im Programm die Konstanten benötigt? Den alten Wert speichern und nach der Konvertierung zurückschreiben wäre zwar möglich, finde ich aber irgendwie... dirty

Naja, wenn es keine saubere Lösung gibt, wird das wohl herhalten müssen. Danke dir

@Marabu Danke für den Tipp! aber leider beachtet auch Str() die Ländereinstellungen
Dani H.
At Least I Can Say I Tried
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Länderunabhängige Konvertierung von Kommazahlen<->

  Alt 3. Mai 2007, 21:16
Dann implemnetier dir doch eine eigene Variante:

Delphi-Quellcode:
function MyFloatToStr( f: Extended): String;
var
    ds, ts: Char;
begin
    ds := DecimalSeparator;
    DecimalSeparator := ',';
    ts := ThousandSeparator;
    ThousandSeparator := '';
    result := FloatToStr( f);
    DecimalSeparator := ds;
    ThousandSeparator := ts;
end;
Markus Kinzler
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#10

Re: Länderunabhängige Konvertierung von Kommazahlen<->

  Alt 3. Mai 2007, 21:53
Hallo Dani,

Zitat von Dani:
Danke für den Tipp, aber leider beachtet auch Str() die Ländereinstellungen
wie kommst du darauf? Ländereinstellungen werden weder von Str() noch von Val() berücksichtigt.

Diese beiden Prozeduren stammen noch aus der Urzeit von Pascal und arbeiten ausschließlich mit der internen (anglophilen) Darstellung.

Gute Nacht
  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 06:14 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