![]() |
AW: inifile ReadFloat deutsch/english formatsettings
Da mich das auch immer genervt hat, habe ich vor Ewigkeiten die
![]() ![]() ![]() |
AW: inifile ReadFloat deutsch/english formatsettings
Ich habe meine Anwendung so umgestellt, dass der Speicher als Int64 interpretiert wird, wenn ich ein TDateTime speichern oder lesen möchte.
Delphi-Quellcode:
type TJanniINIFile = class helper for TIniFile
public constructor CreateForceFile(const FileName: string); // Erstellt gegebenenfalls den Ordner procedure WriteDouble(const Section, Ident: string; const Value: Double); // Mein Versuch, TDateTime regionsunabhängig zu schreiben function ReadDouble(const Section, Ident: string; const Default: Double): Double; end; { TJanniINIFile } constructor TJanniINIFile.CreateForceFile(const FileName: string); begin ForceDirectories(ExtractFilePath(Filename)); Create(FileName); end; function TJanniINIFile.ReadDouble(const Section, Ident: string; const Default: Double): Double; var Pointer: PDouble; Pointer2: PInt64; Int: Int64; begin Pointer2 := @Default; Int := StrToInt64Def(ReadString(Section, Ident, ''), Pointer2^); Pointer := @Int; Result := Pointer^; end; procedure TJanniINIFile.WriteDouble(const Section, Ident: string; const Value: Double); var Pointer: PInt64; begin Pointer := @Value; WriteString(Section, Ident, IntToStr(Pointer^)); end; |
AW: inifile ReadFloat deutsch/english formatsettings
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. Zitat:
|
AW: inifile ReadFloat deutsch/english formatsettings
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.
|
AW: inifile ReadFloat deutsch/english formatsettings
Zitat:
|
AW: inifile ReadFloat deutsch/english formatsettings
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; |
AW: inifile ReadFloat deutsch/english formatsettings
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) ![]() |
AW: inifile ReadFloat deutsch/english formatsettings
Zitat:
|
AW: inifile ReadFloat deutsch/english formatsettings
Und was sind die ANSI-Regeln für Zahlendarstellung?
Wen ich google nach "ansi Zahlendarstellung" komme ich z.B. auf ![]() |
AW: inifile ReadFloat deutsch/english formatsettings
IEEE754 ist für das interne Speicherformat innerhalb des Speichers.
Aber passend zu diesem Format gibt es. ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:14 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 by Thomas Breitkreuz