AGB  ·  Datenschutz  ·  Impressum  







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

Fehler in Zint QR-EPC-Code

Ein Thema von WoGe · begonnen am 10. Mai 2021 · letzter Beitrag vom 10. Mai 2021
Antwort Antwort
WoGe

Registriert seit: 16. Jun 2005
Ort: Kelkheim
178 Beiträge
 
Delphi 10.3 Rio
 
#1

Fehler in Zint QR-EPC-Code

  Alt 10. Mai 2021, 22:54
Die Formatierung des Amount Strings in der Zint OREPC-Lib ist bei mir bei Beträgen über 1000€ falsch.

Es ist möglich das ich etwas (noch) nicht gefunden habe um das Problem anders zu beheben.
Folgender Code löst das Problem zumindest auf meinem Rechner:
(Die Ausgeremten Zeilen sind der Original-Code)
Delphi-Quellcode:
function TZintEPCQR.GetAmountAsString: String;
var s : string;
    l : Integer;
begin
// Result := Format('%n',[FAmount]);
// Result := 'EUR'+ReplaceText(Result,',','.');
    s:= Format('%n',[FAmount]);
    s := s.Replace(',','');
    s := s.Replace('.','');
    l := s.Length;
    s := 'EUR' + s.Substring(0,l-2) + '.' + s.Substring(l-2,2);
    Result := s;
end;
Der so erzeugte QR-Code wird von der Banking-App als richtig und ausführbar erkannt.

Geht das eleganter oder auch ganz anders?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Fehler in Zint QR-EPC-Code

  Alt 10. Mai 2021, 22:59
%n fügt nunmal Tausendertrenner ein.


Format hat einen optionalen FormatSettings-Parameter.

Warum kommt immernoch jemand auf die blöde komische Idee mit Replace rumpfuschen zu müssen,
um das Probem der sprachabhängigen Dezimaltrennzeichen zu lösen?



Und rate mal was mit einen Substring passiert, wenn es keine 2 Nachkommastellen gibt. (wobei man die 2 im Format-String erzwingen könnte)
$2B or not $2B

Geändert von himitsu (10. Mai 2021 um 23:04 Uhr)
  Mit Zitat antworten Zitat
WoGe

Registriert seit: 16. Jun 2005
Ort: Kelkheim
178 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Fehler in Zint QR-EPC-Code

  Alt 10. Mai 2021, 23:38
Hi
Wo er Recht hat hat er Recht:
Delphi-Quellcode:
function TForm1.AmountStr: string;
var
  formatSettings : TFormatSettings;
begin
  formatSettings := TformatSettings.Create(LOCALE_SYSTEM_DEFAULT);
  formatSettings.ThousandSeparator := Char(0);
  formatSettings.DecimalSeparator := Char('.');
  formatSettings.CurrencyString := '';
  Result := 'EUR'+CurrToStrF(myCurrency, ffCurrency, 2, formatSettings);
end;
So gehts auch und ist eleganter
Ich baue das gleich mal in die Lib ein

Danke für den Hinweis

Edit:
Das hier ist die geprüfte Ersatzroutine für die Lib:
Delphi-Quellcode:
function TZintEPCQR.GetAmountAsString: String;
var
  formatSettings : TFormatSettings;
begin
  formatSettings := TformatSettings.Create(LOCALE_SYSTEM_DEFAULT);
  formatSettings.ThousandSeparator := Char(0);
  formatSettings.DecimalSeparator := Char('.');
  formatSettings.CurrencyString := '';
  Result := ('EUR'+CurrToStrF(FAmount, ffCurrency, 2, formatSettings)).TrimRight;
end;

Geändert von WoGe (11. Mai 2021 um 00:16 Uhr)
  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 22:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz