Announcement

Collapse
No announcement yet.

Ausgabe von Fliesskommazahlen in einen Textfile mit "," als Dezimaltrennzeichen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Ausgabe von Fliesskommazahlen in einen Textfile mit "," als Dezimaltrennzeichen

    Hallo<BR>
    bei der Ausgabe von Variablen des Typs "Double" in einen Textfile wird als Dezimaltrennzeichen der "." ausgegeben. Dies ist ungünstig, wenn man den Textfile in Excel einliest, weil Excel nur Zahlen mit "," als Trennzeichen akzeptiert. Kennt ihr einen eleganten Weg, die Zahlenausgabe mit einem "," als Trennzeichen zu bewerkstelligen <B>ohne</B> vorher eine Umwandlung ín einen Ansistring mit nachfolgender Erstetzung von "." und "," vorzunehmen ?<BR>Hans-Georg

  • #2
    Gibt es nicht irgendwo eine globale Variable Names DezimalSeperator??

    Der kann man, glaube ich, das gewünschte Zeichen (auch nur vorübergehend) zuordnen.

    Christia
    Christian

    Comment


    • #3
      Habe nochmal nachgeschaut:

      Folgende Parameter können geändert werden:

      Unit

      SysUtils

      Mit den folgenden Variablen kann das Format für numerische oder Datums-/Zeit-Strings festgelegt werden:

      extern PACKAGE System::AnsiString CurrencyString;

      extern PACKAGE Byte CurrencyFormat;

      extern PACKAGE Byte NegCurrFormat;

      extern PACKAGE char ThousandSeparator;

      extern PACKAGE char DecimalSeparator;

      extern PACKAGE Byte CurrencyDecimals;

      extern PACKAGE char DateSeparator;

      extern PACKAGE System::AnsiString ShortDateFormat;

      extern PACKAGE System::AnsiString LongDateFormat;

      extern PACKAGE char TimeSeparator;

      extern PACKAGE System::AnsiString TimeAMString;

      extern PACKAGE System::AnsiString TimePMString;

      extern PACKAGE System::AnsiString ShortTimeFormat;

      extern PACKAGE System::AnsiString LongTimeFormat;

      extern PACKAGE System::AnsiString ShortMonthNames[12];

      extern PACKAGE System::AnsiString LongMonthNames[12];

      extern PACKAGE System::AnsiString ShortDayNames[7];

      extern PACKAGE System::AnsiString LongDayNames[7];

      Beschreibung

      Die Header-Datei SysUtils enthält eine Anzahl von Variablen, die von verschiedenen Formatierungsroutinen verwendet werden. Durch die Zuweisung von Werten an diese Variablen wird das Format von numerischen und Datums-/Zeit-Strings festgelegt. Die Anfangswerte der Variablen werden aus der Registrierdatenbank mit der Win32-API-Funktion GetLocaleInfo API ausgelesen. VCL-Anwendungen (dies sind keine Konsolenanwendungen) aktualisieren diese Formatvariablen automatisch als Reaktion auf WM_WININICHANGE-Botschaften. Über die Methode UpdateFormatSettings der Variable Application kann eine Änderung der Systemeinstellungen erlaubt oder verhindert werden. Die Voreinstellung für UpdateFormatSettings lautet true. Wenn diese Eigenschaft auf false gesetzt wird, können die Systemeinstellungen nicht geändert werden.

      In der nachstehenden Beschreibung der einzelnen Variablen ist die LOCALE_XXXX-Konstante angegeben, über die der Anfangswert (mit der Win32-API-Funktion GetLocaleInfo) abgerufen werden kann
      Christian

      Comment


      • #4
        DezimalSeperator = ',';<br>
        ThousandSeparator = '.';<br>
        double y = FloatToStr(x); <br>
        usw...<br>
        Gegebenenfalls wieder alles zurücksetzen.<br>

        Gruß Fre

        Comment


        • #5
          Vielen Dank für die Hilfe,<BR>
          die Methode funktioniert, wenn man die Fliesskommazahl in einen String mit z.B. FloatToStr umwandelt. Kennt ihr auch eine Möglichkeit, wie man die Floatzahl <B>direkt</B> mit Kommatrennzeichen in einen Textfile schreiben kann (f<<floatzahl) ?<BR>
          Hans-Geor

          Comment


          • #6
            Mit z.B. String str = FormatFloat("#,##0.00", f) =>
            wenn
            f=0 ==> str="0,00"
            f=1.2 ==> str="1,20"
            f=1234 ==> str="1.234,00"
            f=12345.256 ==> str="12.345,26"
            usw..

            Comment


            • #7
              Das ist unlogisch!

              Die Floatzahl ist doch kein lesbares Zahlenformat im Speicher.

              Wenn du einen Floatwert in eine Datei schreibst, werden wohl einige nicht lesbare Zeichen erscheinen.

              In ein Textfile kannst du einen Floatwert nur nach Umwandlung in einen String schreiben.

              Wenn du Bsp. einen INT (4Byte) in eine Datei schreibst, werden die 4 Byte des INT geschrieben unabhängig davon was für eine Zahl der INT gerade darstellt (5 oder 7023953).

              Christia
              Christian

              Comment

              Working...
              X