FormatFloat Nachkommastellen

Für Fragen von Einsteigern und Programmieranfängern...
siro
Beiträge: 732
Registriert: Di 23. Aug 2016, 14:25
OS, Lazarus, FPC: Windows 11
CPU-Target: 64Bit
Wohnort: Berlin

FormatFloat Nachkommastellen

Beitrag von siro »

Hallo in die Runde.

Ich scheitere grade an der Funktion FormatFloat.
Vielleicht geht das aber auch garnicht was ich machen möchte.

Aufgabe: Ich habe verschiedene Zeitwerte in Milli oder Mikrosekunden.
Da ich nicht die exponentielle Darstellung möchte, sah die FormatFloat Funktion eigentlich sehr gut aus.
Der Wert 125e-6 soll so aussehen: 0,000.125

Der Dezimaltrenner soll ein Komma sein
und der Tausender Trenner soll ein Punkt sein.

Kann man ja einstellen:

Code: Alles auswählen

  DefaultFormatSettings.DecimalSeparator:=',';     // Dezimal   Trenner auf Komma setzen
  DefaultFormatSettings.ThousandSeparator:='.';    // Tausender Trenner auf Punkt setzen    
  Writeln(FormatFloat('0.###,###',125e-6));        // Ausgabe aber leider nur 0,000125
Ausgabe ist: 0,000125
Der Tausende Trenner scheint aber NUR VOR dem Dezimaltrenner zu funktionieren,
soweit ich das erproben konnte. Naja eigentlich wäre das ja auch der 1/1000er Trenner :wink:

Muss ich hier selbst Hand anlegen, oder geht das auch mit Standards ?
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: FormatFloat Nachkommastellen

Beitrag von Socke »

siro hat geschrieben:
Mi 11. Jan 2023, 20:41
Muss ich hier selbst Hand anlegen, oder geht das auch mit Standards ?
Da dein Vorhaben keinem Standard folgt, wirst du selbst Hand anlegen müssen.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: FormatFloat Nachkommastellen

Beitrag von Mathias »

Ich habe es mit LibreCalc probiert, da werden alle Nachkommastellen ohne Trenner dargestellt.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

siro
Beiträge: 732
Registriert: Di 23. Aug 2016, 14:25
OS, Lazarus, FPC: Windows 11
CPU-Target: 64Bit
Wohnort: Berlin

Re: FormatFloat Nachkommastellen

Beitrag von siro »

Okay, Danke ertmal an euch,
Ich hab das grad mal bei meinem Multimeter mir angesehen, denn da machen die das auch
und man kann auch separat den Dezimal und den Tausender Trenner einstellen.
Anzeige_Rigol.jpg
Anzeige_Rigol.jpg (57.81 KiB) 1157 mal betrachtet
ich find das so eigentlich sehr übersichtlich.
Wobei ich das erste mal dachte, es sind 1000 Volt.... :shock:
Da war noch Komma und Punkt vertaucht.... :mrgreen:
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...

Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: FormatFloat Nachkommastellen

Beitrag von Mathias »

Das ewige Theater mit den Trenner. Ich nehme immer den Punkt als Dezimatrenner und Hochkomma als Tausendertrenner.
Was ist übersichtlicher ?
1'000.000 oder 1.000,000 ?
Das , und . Sieht fast gleich aus, besonders wen man nicht mehr gut sieht.
Ihr werdet das Hochkomma auch lieben lernen, wen ihr mal Tausend und Million verwechselt.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: FormatFloat Nachkommastellen

Beitrag von Winni »

Jo - der ewige Ärger.

Auf jeden Fall:

Immer angezeigte Zahlen und deren Wert immer getrennt halten.

Also z.B.

Code: Alles auswählen

Label1.Caption := MySingleFormat (Label1float);
Und ansonsten benutzte ich alsTausender-Trenner das Leerzeichen.
Ist international verständlich.

Hab ich aus dem Umgang mit großen Zahlen in der Matematik geklaut:

Da werden immer Gruppen von 5 Ziffern in Leerzeichen eingefasst. Z.B. Astronomie oder die "Noch-ne-Stelle-von-Pi-berechnen"-Fanatiker.

Winni

Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: FormatFloat Nachkommastellen

Beitrag von Mathias »

Das mit den 5 Ziffern höre ich zum ersten mal, ich kenne nur die mit den 3.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: FormatFloat Nachkommastellen

Beitrag von Winni »

e = 2,71828 18284 59045 23536 02874 71352 7

Wenn Du good old Euler genau wissen willst.

Winni

siro
Beiträge: 732
Registriert: Di 23. Aug 2016, 14:25
OS, Lazarus, FPC: Windows 11
CPU-Target: 64Bit
Wohnort: Berlin

Re: FormatFloat Nachkommastellen

Beitrag von siro »

Guten Morgen, bei Punkt und Komma, fall ich ins Koma... :mrgreen: :

Aber ihr habt recht, das Hochkomma ist "eindeutig" zu erkennen, da auch bei mir die Augen schon mehr oder weniger im Ruhestand sind
und auch das Leerzeichen ist absolut eindeutig.
Eigentlich ist ALLES besser als Punkt oder Komma für einen Trenner.
Eine "Hinterkomma" (Hinter Deizimaltrenner) Formatierung ist dann also nicht vorgesehen mit den Standard Funktionen.
Ich danke für euro Anteilnahme.
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6209
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: FormatFloat Nachkommastellen

Beitrag von af0815 »

Wenn man eine Zahl mit gültigen DezimalTrennern in einen String konvertiert und dabei die 1000er Trenner verwendet lassen sich diese nicht mehr zurückverwandeln, da es das alte Delphi aufgrund - sagen wir Problemen - es auch nicht konnte. Deswegen darf es Lazarus auch nicht können. "It's per design and Delphi compatible"
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: FormatFloat Nachkommastellen

Beitrag von wp_xyz »

Winni hat geschrieben:
Mi 11. Jan 2023, 22:06
Und ansonsten benutzte ich alsTausender-Trenner das Leerzeichen.
Ist international verständlich.
Kleiner Nachteil: Wenn die Zahl in einem Control ausgegeben wird, das automatischen Zeilenumbruch unterstützt (TLabel, TMemo, oder manuelle Textausgabe mit Wordbreak), dann kann es passieren, dass die Zahl in der Mitte an der Tausenderstelle auseinandergerissen wird. Siehe beigefügtes Beispiel, mittlere Zeile (ggfs Breite des Formulars verändern).

Leider ist der Tausendertrenner ein Char und kann also nicht auf ein geschütztes UTF8-Leerzeichen (String!) gesetzt werden. Man muss daher in einem zweiten Schritt StringReplace anwenden, und den Tausendertrenner der Formatsettings durch ein geschütztes Leerzeichen ersetzen.
Dateianhänge
thousandseparator.zip
(2.13 KiB) 40-mal heruntergeladen

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: FormatFloat Nachkommastellen

Beitrag von Winni »

wp_xyz hat geschrieben:
Do 12. Jan 2023, 12:54
Kleiner Nachteil: Wenn die Zahl in einem Control ausgegeben wird, das automatischen Zeilenumbruch unterstützt (TLabel, TMemo, oder manuelle Textausgabe mit Wordbreak), dann kann es passieren, dass die Zahl in der Mitte an der Tausenderstelle auseinandergerissen wird. Siehe beigefügtes Beispiel, mittlere Zeile (ggfs Breite des Formulars verändern).

Hi!

Ja, da muss man sich bei dem Design vorher ein paar Gedanken machen, und nicht wild die Controls auf der Form verteilen.

Und wer ein Memo im Zusammenhang mit Zahlen benutzt, dem ist sowieso nicht zu helfen.

Winni

siro
Beiträge: 732
Registriert: Di 23. Aug 2016, 14:25
OS, Lazarus, FPC: Windows 11
CPU-Target: 64Bit
Wohnort: Berlin

Re: FormatFloat Nachkommastellen

Beitrag von siro »

Nanu, das kannte ich noch garnicht ein "geschütztes Leerzeichen" :shock:
Grad mal ausprobiert, das ist natürlich eine "sinnvolle" Lösung wegen dem eventuellen Umbruch.
Danke Dir wp_xyz

https://blog.zeta-producer.com/nbsp/
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: FormatFloat Nachkommastellen

Beitrag von Winni »

siro hat geschrieben:
Do 12. Jan 2023, 15:13
Nanu, das kannte ich noch garnicht ein "geschütztes Leerzeichen" :shock:

Unicode U+00A0
Hex C2 A0

Winni

TBug
Beiträge: 177
Registriert: Mi 2. Sep 2015, 11:09
OS, Lazarus, FPC: Lazaurus 2.2.4 FPC 3.2.2
CPU-Target: Windows 32/64bit

Re: FormatFloat Nachkommastellen

Beitrag von TBug »

siro hat geschrieben:
Do 12. Jan 2023, 15:13
Nanu, das kannte ich noch garnicht ein "geschütztes Leerzeichen" :shock:
Das gute alte Alt+255.

Wenn Du ein Windows-System Dein eigen nennst, dann solltest Du einmal einen neuen Ordner anlegen und im Eingabefeld den alten Namen komplett löschen und danach die Alt-Taste drücken und gedrückt halten und auf dem Ziffernblock (nicht die oberen Zahlen) 2 5 5 eingeben und mit Enter bestätigen.

Und nun einmal versuchen diesen Ordner auf normalem Wege zu löschen.

Keine Angst, das System wird dadurch nicht beschädigt.

Antworten