Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Länderunabhängige Konvertierung von Kommazahlen<->String (https://www.delphipraxis.net/91353-laenderunabhaengige-konvertierung-von-kommazahlen-string.html)

Dani 3. Mai 2007 20:22


Länderunabhängige Konvertierung von Kommazahlen<->Stri
 
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ß

mkinzler 3. Mai 2007 20:26

Re: Länderunabhängige Konvertierung von Kommazahlen<->
 
Es gibt doch auch die varinate mit dem Format als Parameter

Dani 3. Mai 2007 20:29

Re: Länderunabhängige Konvertierung von Kommazahlen<->
 
...welche bei der Wahl des Dezimaltrennzeichens leider auch die Ländereinstellungen beachtet :(

mkinzler 3. Mai 2007 20:40

Re: Länderunabhängige Konvertierung von Kommazahlen<->
 
Nein:
Delphi-Quellcode:
function StrToFloat(const S: string; const FormatSettings: TFormatSettings): Extended;

Dani 3. Mai 2007 20:50

Re: Länderunabhängige Konvertierung von Kommazahlen<->
 
Kennt mein Delphi6 leider nicht, schade.

mkinzler 3. Mai 2007 20:57

Re: Länderunabhängige Konvertierung von Kommazahlen<->
 
Was spricht eigentlich gegen die Veränderung der Konstante(n)?

marabu 3. Mai 2007 21:01

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

Zitat:

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

Dani 3. Mai 2007 21:11

Re: Länderunabhängige Konvertierung von Kommazahlen<->
 
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

mkinzler 3. Mai 2007 21:16

Re: Länderunabhängige Konvertierung von Kommazahlen<->
 
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;

marabu 3. Mai 2007 21:53

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

Zitat:

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:19 Uhr.
Seite 1 von 2  1 2      

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