[Gelöst] Warum funktioniert StrToFloat('1.234,56') nicht?

Für Fragen von Einsteigern und Programmieranfängern...
wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: [Gelöst] Warum funktioniert StrToFloat('1.234,56') nicht?

Beitrag von wp_xyz »

Drei pos()-Aufrufe... Zumindest den letzten könnte man sich sparen, wenn der DecimalSeparator schon ein Punkt ist:

Code: Alles auswählen

  if FormatSettings.DecimalSeparator <> '.') then
  begin
    P:=Pos(FormatSettings.DecimalSeparator,S);
    If (P<>0) Then
      S[P] := '.';
  end;
Aber leider sind die umzuwandelnden Strings immer sehr kurz, und die Hauptarbeit in val() ist viel aufwändiger, so dass eine solche "Nano-Optimierung" nicht ins Gewicht fällt...

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: [Gelöst] Warum funktioniert StrToFloat('1.234,56') nicht?

Beitrag von Socke »

wp_xyz hat geschrieben:
Mi 1. Feb 2023, 14:27
Aber leider sind die umzuwandelnden Strings immer sehr kurz, und die Hauptarbeit in val() ist viel aufwändiger, so dass eine solche "Nano-Optimierung" nicht ins Gewicht fällt...
Du kannst ja trotzdem einen Patch einreichen.

Schwerwiegender dürfte die String-Allokation sein. Im Zusammenspiel mit StrToFloat wird ja in TextToFloat ein Pascal-String erzeugt, obwohl vorne in StrToFloat schon ein Pascal-String hineingegeben wurde.
Das ließe sich doch auch Interface-stabil umsetzen, indem man überladene Funktionen mit Pascal-Strings anbietet und die PChar-Varianten dann einfach darauf verzweigen. Oder irre ich mich da gerade?
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

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

Re: [Gelöst] Warum funktioniert StrToFloat('1.234,56') nicht?

Beitrag von wp_xyz »

Socke hat geschrieben:
Mi 1. Feb 2023, 17:19
wp_xyz hat geschrieben:
Mi 1. Feb 2023, 14:27
Aber leider sind die umzuwandelnden Strings immer sehr kurz, und die Hauptarbeit in val() ist viel aufwändiger, so dass eine solche "Nano-Optimierung" nicht ins Gewicht fällt...
Du kannst ja trotzdem einen Patch einreichen.

Schwerwiegender dürfte die String-Allokation sein. Im Zusammenspiel mit StrToFloat wird ja in TextToFloat ein Pascal-String erzeugt, obwohl vorne in StrToFloat schon ein Pascal-String hineingegeben wurde.
Das ließe sich doch auch Interface-stabil umsetzen, indem man überladene Funktionen mit Pascal-Strings anbietet und die PChar-Varianten dann einfach darauf verzweigen. Oder irre ich mich da gerade?
Danke für den Anschupser - ich habe mich aufgerafft, und mir das ganze näher angesehen und einen Patch daraus gemacht (https://gitlab.com/freepascal.org/fpc/s ... sues/40137). Zusammen mit der String-Wandlung sind dann doch immerhin 20% Beschleunigung herausgekommen.

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: [Gelöst] Warum funktioniert StrToFloat('1.234,56') nicht?

Beitrag von Socke »

wp_xyz hat geschrieben:
Mi 1. Feb 2023, 22:44
Danke für den Anschupser - ich habe mich aufgerafft, und mir das ganze näher angesehen und einen Patch daraus gemacht
Gerne doch :) 20 Prozent hätte ich nicht erwartet.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Antworten