Exaktes Speichern für Float und Doubles in Preferences

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8812
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Exaktes Speichern für Float und Doubles in Preferences

Beitrag von NicTheQuick »

Ein Beispiel ist dabei. Die Datei "Preferencestest.pref" muss wieder von
Hand gelöscht werden.

Code: Alles auswählen

Procedure WritePreferenceDoubleEx(Keyword.s, Value.d)
  Protected q.q
  q = PeekQ(@Value)
  ProcedureReturn WritePreferenceQuad(Keyword, q)
EndProcedure
Procedure.d ReadPreferenceDoubleEx(Keyword.s, DefaultValue.d)
  Protected q.q
  q = PeekQ(@DefaultValue)
  q = ReadPreferenceQuad(Keyword, q)
  ProcedureReturn PeekD(@q)
EndProcedure

Procedure WritePreferenceFloatEx(Keyword.s, Value.f)
  Protected l.l
  l = PeekL(@Value)
  ProcedureReturn WritePreferenceLong(Keyword, l)
EndProcedure
Procedure.f ReadPreferenceFloatEx(Keyword.s, DefaultValue.f)
  Protected l.l
  l = PeekL(@DefaultValue)
  l = ReadPreferenceLong(Keyword, l)
  ProcedureReturn PeekF(@l)
EndProcedure

CreatePreferences("Preferencestest.pref")

d.d = 1
For a.l = 1 To 85
  d * 0.5
Next
Debug "Das ist d = (0.5)^85: " + StrD(d, 25)
Debug "d wird jetzt gespeichert"
Debug ""
WritePreferenceDouble("PB", d)
WritePreferenceDoubleEx("NTQ", d)

For a.l = 1 To 85
  d * 2
Next
Debug "Das ist d * 2^85: " + StrD(d, 25)
Debug ""

ClosePreferences()

OpenPreferences("Preferencestest.pref")
Debug "d wird jetzt normal ausgelesen"

d = ReadPreferenceDouble("PB", -1)
For a.l = 1 To 85
  d * 2
Next
Debug "d * 2^85: " + StrD(d, 25)
Debug ""

Debug "d wird jetzt anders ausgelesen"
d = ReadPreferenceDoubleEx("NTQ", -1)
For a.l = 1 To 85
  d * 2
Next
Debug "d * 2^85: " + StrD(d, 25)
ClosePreferences()