AGB  ·  Datenschutz  ·  Impressum  







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

inifile ReadFloat deutsch/english formatsettings

Ein Thema von bernhard_LA · begonnen am 14. Jul 2021 · letzter Beitrag vom 16. Jul 2021
Antwort Antwort
freimatz

Registriert seit: 20. Mai 2010
1.490 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: inifile ReadFloat deutsch/english formatsettings

  Alt 15. Jul 2021, 10:50
Pointer sind bei uns - zum Glück - zu Recht - verboten.
Wenn es um Datum geht würde ich das in ANSI-Format speichern. Aber Fragenden ging es wohl um "normale" Double.

Erstmal ist es totaler Schwachsinn, dass INIs überhaupt lokalisiert gespeichert/gelesen werden.
(aber für INIs gibt es ja leider auch eigentlich keine globale einheitliche Konvention/Richtline/Norm/...)
Ist das bei XML und/oder JSON anders?
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
655 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: inifile ReadFloat deutsch/english formatsettings

  Alt 15. Jul 2021, 11:20
Ja. XML kann über einen Header bestimmt werden, was für eine Codierung gilt. Ohne den Header ist es per Definition UTF-8. JSON ist nach meinem Wissenstand per Definition immer UTF-8.
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.118 Beiträge
 
Delphi 2009 Professional
 
#3

AW: inifile ReadFloat deutsch/english formatsettings

  Alt 15. Jul 2021, 11:29
Ja. XML kann über einen Header bestimmt werden, was für eine Codierung gilt. Ohne den Header ist es per Definition UTF-8. JSON ist nach meinem Wissenstand per Definition immer UTF-8.
Um Zeichenkodierung geht es hier nicht.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
jziersch

Registriert seit: 9. Okt 2003
Ort: München
258 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: inifile ReadFloat deutsch/english formatsettings

  Alt 15. Jul 2021, 11:55
Hier als Lösungsvorschlag eine Funktion ConvertStr um einen String in ein Double zu verwandeln
und dabei . und , alternativ zu akzeptieren sowie spaces zu ignorieren.
Um INI Dateien zu lesen meiner Ansicht nach recht zweckmässig, um beim Start eines Programmes Exceptions zu vermeiden.


Code:
function ConvertStr( const str : string ) : Double;
var i : Integer;
    fNeg, fDez : Boolean;
    c : Char;
    fN, fDD : Double;
begin
      fN := 0;
      fNeg := FALSE;
      fDez := FALSE;
      fDD := 10;
      for i := 1 to Length(str) do
      begin
        c := str[i];
        if c = '-' then fNeg := not fNeg
        else if c = '.' then fDez := true
        else if c = ',' then fDez := true
        else if c in ['0'..'9'] then
        begin
          if fDez then
          begin
            fN := fN + (Integer(c) - Integer('0'))/fDD;
            fDD := fDD * 10;
          end else
          begin
            fN := fN * 10 + (Integer(c) - Integer('0'));
          end;
        end
        // Wenn auskommentiert werden unerwartete Zeichen einfach ignoriert
        // else break
        ;
      end;
      if fNeg then Result := -fN
      else Result := fN;
end;
WPCubed GmbH
Komponenten für Delphi:
WPTools, wPDF, WPViewPDF
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.373 Beiträge
 
Delphi 12 Athens
 
#5

AW: inifile ReadFloat deutsch/english formatsettings

  Alt 15. Jul 2021, 12:13
XML nein, da sind Floats garnicht gefiniert (alles als String und das Format ist nicht vorgegeben)

aber JSON ja, denn dort ist ALLES ganz genau definiert, zumindestens bei Sting, Boolean, Integer und Float. (fast, denn beim Datum gibt es zwar indirekt eine Quasi-Vorgabe, aber Datum als "Typ" gibt es das per-se nicht)
https://www.json.org/json-de.html
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
655 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: inifile ReadFloat deutsch/english formatsettings

  Alt 15. Jul 2021, 15:45
Ja. XML kann über einen Header bestimmt werden, was für eine Codierung gilt. Ohne den Header ist es per Definition UTF-8. JSON ist nach meinem Wissenstand per Definition immer UTF-8.
Um Zeichenkodierung geht es hier nicht.
Ja hast natürlich recht. Hatte gedacht weil es um definierte Vorgaben geht. Wenn man aber Doubles,Floats, etc. speichert sollten diese der ANSI Regeln für die Zahlandrestellung nutzen oder multipliziren mit 100 oder sawas. Bei allen XML die ich bisher verabreiten musste, wurde vom Interface (Producer des XML) vorgegeben, dass es mit 100 Multipliziert werden muss (im Fall von Geldbeträgen) oder aber der Punkt als Pflicht vorgegeben ist. Bei Datumsangaben ist es übrignesn das selbe. Die Daten in lokalen Format zu speichern ist aber auf jeden Fall unzulässig und falsch.
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.490 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: inifile ReadFloat deutsch/english formatsettings

  Alt 15. Jul 2021, 16:43
Und was sind die ANSI-Regeln für Zahlendarstellung?
Wen ich google nach "ansi Zahlendarstellung" komme ich z.B. auf https://de.wikipedia.org/wiki/IEEE_754
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.373 Beiträge
 
Delphi 12 Athens
 
#8

AW: inifile ReadFloat deutsch/english formatsettings

  Alt 15. Jul 2021, 17:37
IEEE754 ist für das interne Speicherformat innerhalb des Speichers.

Aber passend zu diesem Format gibt es.
https://www.oreilly.com/library/view...2521/re67.html
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
655 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: inifile ReadFloat deutsch/english formatsettings

  Alt 16. Jul 2021, 11:55
Und was sind die ANSI-Regeln für Zahlendarstellung?
Wen ich google nach "ansi Zahlendarstellung" komme ich z.B. auf https://de.wikipedia.org/wiki/IEEE_754
Finde gerade auch nichts Vernünfitges, aber es entsprcht eigentlich grösstenteils dem US Format, also wie folgt:
DezimalSeparator = .
ThousandSeparator = ,

Der ThousandSeparator würde ich aber beim Speichern der Zahl immer weglassen und nur den Punkt als Dezimalzeichen verwenden. Beim Einlsende der Daten muss einfach klar sein, wie diese Zahlen vorliegen und das dann entsprechend behandelt werden. Ich mache das immer nach mienem Beispiel, das ich gepostet habe. Thread spielen bei mir dabei keine Rolle, da ich sowas nicht in einem Thread nutze. Da müsste man das dann anders lösen.
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.118 Beiträge
 
Delphi 2009 Professional
 
#10

AW: inifile ReadFloat deutsch/english formatsettings

  Alt 16. Jul 2021, 07:49
Wenn es um Datum geht würde ich das in ANSI-Format speichern. Aber Fragenden ging es wohl um "normale" Double.
Es gibt keinen Unterschied zwischen TDateTime und Double. Es sind einfach zwei Begriffe für exakt dasselbe, nämlich IEEE-754-Double. Nur die Darstellung von generischen Double-Werten als Datum ist nicht so toll, da u.U. ungültig (max 9999?).

Pointer sind bei uns - zum Glück - zu Recht - verboten.
Und mit Windows kommuniziert ihr in Morsecode?
Es gibt halt keinen verlustfreien Weg, eigentlich inkompatiblen Speicher zu casten.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Antwort Antwort


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 07:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz