FROM CACHE - de_header

Rundungsfehler in Shopify?

rockstar3000
Entdecker
24 2 11

Hallo Leute, 

ich habe gestern bemerkt, daß in der Shopify Order Summary offensichtlich ein Rundungsfehler auftritt. Und zwar bei der Berechnung eines prozentualen Rabatts. 

In meinem Beispiel kostet mein Produkt 79,99€. Wenn ich einen Rabatt-Code für 10% Preisnachlass anwende, dann sollte der absolute Rabattbetrag 8,00€ sein. Weil 10% von 79,99€ eben 7,999 ergibt und das kaufmännisch auf zwei Dezimalstellen gerundet 8,00€ sind und nicht wie - fälschlicherweise in Shopify - 7,99€ sind. Wenn man nun diese 7,99€ von 79,99€ abzieht bleibt 72,00€ übrig. Aber das ist halt auch falsch. 79,99€ abzüglich 10% sind 71,99€ und nicht 72,00€.

An der Stelle wäre das noch zu verschmerzen. Den meisten Kunden wird es eventuell nicht auffallen. Manchen aber schon. 

Das größere Problem stellt für mich folgendes dar:

Ich habe eine App die im Cart die Eingabe von Discount Codes ermöglicht. Liegt ein Produkt mit 79,99€ im Cart, dann wird nach Abzug vom Rabatt als Summe 71,99€ angezeigt. Das ist korrekt. Nur wenn dann der Kunde auf den Paypal Express Button klickt, sendet Shopify einen Gesamtbetrag von 72,00€ an Paypal. Das ist sehr schlecht, weil es für den Kunden nun sehr verwirrend ist warum im Cart 71,99€ angezeigt wird und er in Paypal 72,00€ abgezogen bekommt. 1 Cent mag jetzt nicht die Welt sein, aber es ist eine Ungereimtheit die der Kunde nicht nachvollziehen kann und steigert mit Sicherheit nicht das Vertrauen in meinen Shop.

Kennt jemand dieses Problem und gibt es dafür Abhilfe?

Vielen Dank im voraus!

17 ANTWORTEN 17

Gabe
Shopify Staff
16357 2587 3853

Hey @rockstar3000 

Danke für die Angaben bzgl. der Rundung. Dazu möchte ich folgendes zuerst mal feststellen, weshalb deine Preise gerundet werden, und zwar ob du einen gerundeten Währungswert wie {{ amount_no_decimals }} in den Währungs/Zahlungseinstellungen aktiv hast? Dies kann in zwei Szenarien vorkommen und das kann man im Admin ändern -> Einstellungen -> Allgemein -> Währung des Shops -> Formatierung ändern zu sowas wie:

  • €{{amount_with_comma_separator}} EUR

image.png

Das sieht dann ähnlich wie das folgende fiktive Beispiel aus:

image.png

Prüfe bitte auch ob es ein Skript in deinem Theme, das die Werte im Adminbereich überschreibt. Um das zu bestätigen, kann man im Theme nach amount_no_decimals suchen, um zu bestätigen, dass im Hintergrund nicht gerundet wird.

Wenn das ein Shopify Theme ist und du auf einem bezahlten Plan dann können wir das ggf. anschauen als Teil deiner 60-Min Design Time. Schicke uns eine E-Mail hier und lass mich hier die Ticket Nr. wissen.

VG,

Gabe | Social Care @ Shopify
 - War meine Antwort hilfreich? Klicke Like um es mich wissen zu lassen! 
 - Wurde deine Frage beantwortet? Markiere es als Akzeptierte Lösung 
 - Um mehr zu erfahren, besuche das Shopify Help Center oder den Shopify Blog

rockstar3000
Entdecker
24 2 11

Hey @Gabe,

Danke für deine Antwort!

also bei mir sieht es folgendermaßen aus:

Bildschirmfoto 2021-02-03 um 22.16.23.pngBildschirmfoto 2021-02-03 um 22.16.36.png

Ich will die Dezimalstellen natürlich drin haben. Allerdings wüßte ich jetzt nicht wo ich im Theme suchen soll, da der Rundungsfehler erst in der Order Summary im Checkout zu sehen ist. Gebe ich dort einen Rabattcode ein, der um 10% ermäßigt, dann tritt der Fehler auf.

VG

Sini 

rockstar3000
Entdecker
24 2 11

ah, jetzt habe ich doch was entdeckt. Im theme.dev.js steht das hier:

 switch (formatString.match(placeholderRegex)[1]) {
      case 'amount':
        value = formatWithDelimiters(cents, 2);
        break;
      case 'amount_no_decimals':
        value = formatWithDelimiters(cents, 0);
        break;
      case 'amount_with_comma_separator':
        value = formatWithDelimiters(cents, 2, '.', ',');
        break;
      case 'amount_no_decimals_with_comma_separator':
        value = formatWithDelimiters(cents, 0, '.', ',');
        break;
      case 'amount_no_decimals_with_space_separator':
        value = formatWithDelimiters(cents, 0, ' ');
        break;
    }

 

rockstar3000
Entdecker
24 2 11

In theme.min.js i found this:

  switch(a.match(i)[1]){case"amount":o=n(t,2);break;case"amount_no_decimals":o=n(t,0);break;case"amount_with_comma_separator":o=n(t,2,".",",");break;case"amount_no_decimals_with_comma_separator":o=n(t,0,".",",");break;case"amount_no_decimals_with_space_separator":o=n(t,0," ")}return a.replace(i,o)}

But that all looks rather like formatting than changing values. 

Gabe
Shopify Staff
16357 2587 3853

Hey @rockstar3000 

Verstehe, da wir mit dem Code vorsichtig umgehen müssen, können unsere Techniker das ggf. anschauen wenn das ein Shopify Theme ist und du auf einem bezahlten Plan (als Teil deiner 60-Min Design Time). Schicke uns eine E-Mail hier und lass mich hier die Ticket Nr. wissen. Du kannst auch gerne auf diese Unterhaltung hier verweisen.

VG,

Gabe | Social Care @ Shopify
 - War meine Antwort hilfreich? Klicke Like um es mich wissen zu lassen! 
 - Wurde deine Frage beantwortet? Markiere es als Akzeptierte Lösung 
 - Um mehr zu erfahren, besuche das Shopify Help Center oder den Shopify Blog

rockstar3000
Entdecker
24 2 11

Ich wüßte jetzt nicht was das mit dem Theme zu tun, da der Rundungsfehler erst im Checkout zu sehen ist. Egal was ich davor eingebe. 

Teste doch mal in einem jungfräulichen Shop die Eingabe eines 10%-Rabatt-Codes bei einem Preis von 79,99 in der Gesamtsumme. 

VG

rockstar3000
Entdecker
24 2 11

Hi @Gabe,

so berechnet das Shopify wenn ich das Debut Theme verwende. Im Checkout der gleiche Fehler:

Bildschirmfoto 2021-02-05 um 01.20.18.png

Und so sollte es berechnet werden:

Bildschirmfoto 2021-02-05 um 01.17.53.png

 

VG

Gabe
Shopify Staff
16357 2587 3853

Hey @rockstar3000 

Danke für die Bilder und ich kann voll verstehen warum das verwirrend für die Kunden ist, wenn einmal brutto 71,99 angezeigt wird, und dann brutto 72 im Checkout. Es ist in der Tat nicht das Theme, da hast du recht, sondern es liegt scheinbar daran, dass die Discount App und Shopify beide anders brutto abrunden (siehe meine Rechnung unten). Hast du mit den App Entwickler sprechen können? Ich habe das in der Tat in meinem eigenen Testshop getestet, wie man unten sieht, und folgendes war meine Rechnung:

  • 79,99 mal 10% = 7,999 (wird auf zwei Dezimalstellen aufgerundet da Shopify nur bis zu 2 Stellen berechnet = 7,99 - nicht 8 wie in deinem Bild)
  • 79,99 minus 7,99 = 72

Leuchtet das ein? Deine Discount App zeigt aber 71,99 im Warenkorb an, ist das richtig? 

Wenn du aber nicht einverstanden bist dann schicke uns eine E-Mail hier und wir können das gerne anschauen oder an die App Entwickler weiterleiten, so dass die das mal anschauen warum die App anders abrundet als Shopify.

image.png

Gabe | Social Care @ Shopify
 - War meine Antwort hilfreich? Klicke Like um es mich wissen zu lassen! 
 - Wurde deine Frage beantwortet? Markiere es als Akzeptierte Lösung 
 - Um mehr zu erfahren, besuche das Shopify Help Center oder den Shopify Blog

rockstar3000
Entdecker
24 2 11

Hi @Gabe,

ich benutze keine App mehr. Ich hab sie gelöscht. Den Code im cart.liquid hab ich auf Werkseinstellung zurück gesetzt. Der Fehler tritt in der Order Summary auf. Im Checkout. 

Du schreibst 

  • 79,99 mal 10% = 7,999 (wird auf zwei Dezimalstellen aufgerundet da Shopify nur bis zu 2 Stellen berechnet = 7,99 - nicht 8 wie in deinem Bild)

Das ist aber kein Runden sondern nur Abschneiden. Wenn man 7,999 auf zwei Dezimalstellen kaufännisch rundet, dann muß das 8,00 sein und nicht 7,99. Du kannst das in jedem Taschenrechner der Welt, in jeder Software der Welt testen. Probier in Excel, in Google Sheets. 

Ihr rundet falsch. 

Wo kann ich das umstellen?

VG

Gabe
Shopify Staff
16357 2587 3853

@rockstar3000 

Das System macht es aufgrund des folgenden Use-Case:

Da das System auf zwei Dezimal aufrunden muss (es arbeitet z. B. nicht mit der Ziffer 7,999) kann es entweder aufrunden oder runter-runden. In einem Fall spart der Kunde einen Cent und der Händler zahlt drauf. Im anderen Fall das Gegenteil. Die Entwickler haben sich entschieden, dass der Kunde den einen Cent zahlt anstatt der Händler. Sprich, das Berechnungssystem von Shopify sorgt dafür, dass du den Cent nicht verlierst, wenn du einen Rabatt verwendest.

Wie gesagt, das ist teil des derzeitigen Systemverhalten und du kannst uns eine E-Mail hier schicken wenn du damit nicht einverstanden bist, und wir können das gerne anschauen. Viel werden wir da aber nicht machen können ausser das für ein zukünftiges release in Anbetracht zu nehmen. Ändern wir das aber zugunsten des Kunden, werden viele andere Händler nicht einverstanden sein, wenn du verstehst was ich meine.

Lass mich hier die Ticket Nr. wissen, so dass ich das an unsere Entwickler beschleunigen kann. Hast du auch den App Code erfolgreich entfernen können? 

VG,

Gabe | Social Care @ Shopify
 - War meine Antwort hilfreich? Klicke Like um es mich wissen zu lassen! 
 - Wurde deine Frage beantwortet? Markiere es als Akzeptierte Lösung 
 - Um mehr zu erfahren, besuche das Shopify Help Center oder den Shopify Blog

rockstar3000
Entdecker
24 2 11

Hi @Gabe,

Danke für deine ausführliche Schilderung.

Ja ich verstehe das. 

Ich sehe es aber auch so, daß aus verkaufspsychologischer Sicht nach Abzug des Rabatts ein Preis von 71,99€ "deutlich niedriger" wirkt als 72,00€. Eigentlich sollte das jeder Verkäufer verstanden haben. Dieser eine gesparte Cent kann die Verringerung der Conversion niemals aufwiegen. Jedenfalls aus meiner Sicht.

Zudem sollten nicht Entwickler entscheiden wie gerundet wird sondern eure UX Consultants wenn ich mir diese Empfehlung erlauben darf. Oder wenn nicht die, dann sollte man sich an kaufmännischen Buchhaltungsrichtlinien halten. Aber ich weiß auch wie es oft läuft und will euch nun nicht erzählen wie ihr euren Job machen sollt. Ich hätte halt gerne eine Lösung die für meine Kunden transparent ist. Die Discount Stacking App für den Cart mußte ich wieder entfernen weil sie nicht richtig funktioniert. Aufgrund von beschränkten Möglichkeiten der API. Und den PayPal Express Checkout hab ich nun auch entfernt, insofern fällt der Fehler nicht so stark auf, weil für meine Kunden keine zwei verschiedenen "Zahlendimensionen" nebeneinander auftauchen werden. 

Ich hab aber gesehen, daß der Shopify Plus Plan stacked discounts im Cart ermöglicht. Insofern werde ich halt warten bis ich mir den Plus Plan leisten kann und das dann umsetzen. Bis dahin gibts halt nur Rabatt im Checkout zu sehen.

Ich hab dem Support eine Email geschickt. Die Ticketnummer lautet: 22170454

Ich freue mich über weitere Nachrichten und falls es keine Änderung der Rundungsmethode geben wird, über Vorschläge für einen Workarround.

Vielen Dank nochmal für deine Mühe und Unterstützung @Gabe!

VG

Sini

Gabe
Shopify Staff
16357 2587 3853

@rockstar3000 

Da hast du recht und wenn ich "Entwickler" sage dann meine ich in der Tat unser UX Team. Diesen Begriff verwende ich meist nicht, da nicht alle diesen Begriff verstehen, aber ich sehe, dass du ein Power-User bist und daher bist du hier am richtigen Ort : )

In deinem Beispiel ist es auch so, dass der Sachverhalt auftritt aufgrund eines % Rabattcodes und nicht eines Fixed Price oder Flat Rate Rabbatts. Dein Produkt wird ja schon auf der Produktseite beispielsweise mit €79,99 beworben, was aus den bekannten verkaufspsychologischen Gründen die Wahrscheinlichkeit erhöhen wird, dass der Besucher das Produkt durch den Salesfunnel führen wird ohne abzubrechen, denke ich mal. Wenn dann im letzten Schritt des Checkouts €72 statt €71,99 steht dann wird dies wahrscheinlich keinen großen negativen Effekt haben oder zu einem Abbruch führen, hoffe ich mal auch wenn die 3rd party App einen anderen Betrag angeben hat. Das könnte man aber sicherlich mit etwas A/B Split Testing testen. Siehe mehr dazu hier in unserem Blogartikel hier.

Use-Case

Aber um den technischen Sachverhalt zu erklären, siehe ein typisches Beispiel wie das berechnet wird im Backend und da sieht man wie schwierig der mathematische Umgang mit Cent Bruchteile sein kann:

irb(main):002:0> 8.78 * 0.03
=> 0.26339999999999997

Wenn ein Händler einen 10 %-Rabattcode anbietet und die Produkte vor dem Rabatt beispielsweise auf 30,49 € kommen, wird ein Rabatt von 3,04 € angewandt und nicht 3,05 € (so würden 10 % von 30,49 = 3,049 normalerweise auf den Cent gerundet). Dies kann schlecht für die Buchhaltung sein und ist mühsam abzustimmen. Man ist auch nicht in der Lage, einen Rabattcode aufzurunden (z. B. auf den nächsten Cent). Manchmal wird ein einzelnes Produkt anders gerundet als die Gesamtsumme, wenn es mehrere vom selben gibt - z.B. 2 Produkte, die auf €24.03 rabattiert sind, ergeben zusammen €48.05 statt €48.06. Siehe ein fiktives Beispiel hier:

image.png

ABHILFE(N)

Man kann versuchen, mit den Produktpreisen herumzuspielen (z. B. alle geraden Zahlen zu machen) oder andere Rabattypen wie fixed-price oder flat-rate Rabatte verwenden statt %-Rabatte.

Gabe | Social Care @ Shopify
 - War meine Antwort hilfreich? Klicke Like um es mich wissen zu lassen! 
 - Wurde deine Frage beantwortet? Markiere es als Akzeptierte Lösung 
 - Um mehr zu erfahren, besuche das Shopify Help Center oder den Shopify Blog

hb-manuel
Tourist
4 0 0

@Gabe danke für die Antwort im anderen Thread.

 

Und wie sieht es hier aus, gibt es hier mittlerweile Neuerungen? 😄 Wir würden sehr gerne drei Dezimalstellen im Preis anzeigen, aber es scheint mir, als wäre das nicht so einfach möglich. Unser Theme (Empire) nutzt anscheinend die formatMoney Methode von Shopify. Den Code habe ich hier gefunden. Komme ich da irgendwie ran, dann könnte ich einfach die precision ändern, wenn ich mich nicht irre, oder hast du eine andere Möglichkeit für mich?

 

LG

Gabe
Shopify Staff
16357 2587 3853

Hey Manuel! @hb-manuel 

 

Mich freut es immer einen alten Post zu wiederbeleben denn das sind wichtige Themen die manchmal mit der Zeit etwas vergessen werden können!

 

Teil 1:

Das Problem ist eine Herausforderungen, das stimmt, mit denen viele Händler im Umgang mit Währungsrundungen und Rabattberechnungen zu kämpfen haben. Shopify rundet in der Tat auf zwei Dezimalstellen, und deswegen kann dies zu geringfügigen Diskrepanzen zwischen dem im Warenkorb angezeigten und dem letztendlich berechneten Preis führen.

 

Vor allem mit einem an PayPal gesendeten Betrag ist es besonders problematisch, weil das das Vertrauen der Kunden in den Checkout-Prozess beeinträchtigen kann. Auch wenn es sich nur um einen Cent Unterschied handelt, ist die Transparenz und Konsistenz der Preisgestaltung schon wichtig.

 

Was die technische Seite betrifft, hast du richtig erkannt, dass die Formatierung der Währung in deinem Shopify-Shop eine Rolle spielen kann. Die Verwendung von {{ amount_with_comma_separator }} im Vergleich zu {{ amount_no_decimals }} in den Währungs- und Zahlungseinstellungen deines Shops ist ein guter Anfang, um sicherzustellen, dass die Preise so genau wie möglich angezeigt werden. Allerdings beeinflusst dies nicht direkt die Art und Weise, wie Shopify oder eine Drittanbieter-App Rabatte berechnet und rundet.

 

Du hast bereits die formatMoney Methode erwähnt, die in Shopify's JavaScript-Bibliotheken verwendet wird. Durch Anpassen der Präzision dieser Methode könntest du theoretisch die Anzeige auf drei Dezimalstellen erweitern, aber dies könnte wiederum andere Probleme verursachen, insbesondere bei der Integration mit Zahlungsgateways, die nur zwei Dezimalstellen erwarten.

 

Teil 2 folgt gleich! 😉

Gabe | Social Care @ Shopify
 - War meine Antwort hilfreich? Klicke Like um es mich wissen zu lassen! 
 - Wurde deine Frage beantwortet? Markiere es als Akzeptierte Lösung 
 - Um mehr zu erfahren, besuche das Shopify Help Center oder den Shopify Blog

Gabe
Shopify Staff
16357 2587 3853

@hb-manuel 

Hier Teil 2:

 

Für spezifische Anpassungen, wie die Anzeige von prozentualen Rabatten mit Rundung auf der Warenkorbseite und der Produktseite, gibt es Techniken, die Shopify's neu eingeführte Math Filters nutzen. Diese Filters ermöglichen es, Zahlen zu runden und können für die Anzeige von Rabatten in einer Weise genutzt werden, die eventuelle Rundungsdifferenzen minimiert​​.

 

Zudem gibt es in der Community Diskussionen über die Herausforderung der Währungsumrechnung und Rundung, wo Nutzer spezifische Probleme mit der Rundung diskutieren, die ihre Preise beeinflussen, besonders bei niedrigpreisigen Artikeln. Einige Shop-Besitzer suchen nach Möglichkeiten, die Rundungsregeln anzupassen, um Preiserhöhungen durch Umrechnung in andere Währungen zu vermeiden. In einem Fall wurde ein Tutorial vorgeschlagen, das erklärt, wie man konvertierte Preise ohne zusätzliche Apps auf jede gewünschte Dezimalstelle runden kann​​.

 

Der Code aus deinen verlinkten GitHub Gist

Der GitHub-Gist scheint Skripte zu bieten für Shopify, das dazu dienen, Geldbeträge in verschiedenen Formaten darzustellen. Es wird die Shopify.formatMoney Methode definiert, die zwei Parameter nimmt: cents, den Betrag in Cent, und format, das Format, in dem der Betrag dargestellt werden soll. Das unterstützt verschiedene Darstellungsformen, einschließlich der Anzeige mit oder ohne Dezimalstellen, mit Komma oder Punkt als Tausendertrennzeichen und so weiter.

 

Es ist vielleicht nützlich für Shops, die eine präzisere Kontrolle über die Preisformatierung im Shop benötigen, besonders von Preisen in verschiedenen Währungen oder Formaten und erlaubt eine flexible Anpassung der Preisformatierung ohne direkten Eingriff in das Shopify-Backend oder die Notwendigkeit, verschiedene Einstellungen manuell zu konfigurieren.

 

Einige wichtige Punkte aus dem Code die ich jetzt aus unserer Developer Doku und unser Entwickler Forum entnommen habe:

  • Die Funktion formatWithDelimiters wird intern verwendet, um den Betrag mit den gewünschten Trennzeichen und der gewünschten Präzision zu formatieren.
  • Es unterstützt auch eine zusätzliche Formatierungsoption "amount_with_apostrophe_separator", die in den Shopify-Dokumenten als Möglichkeit zur Währungsformatierung erwähnt wird.
  • Der Code ist so gestaltet, dass er unabhängig von der Währung funktioniert, indem der Betrag und das Format dynamisch als Parameter übergeben werden.

Wenn Fehler auftreten, wie im Kommentar im Github erwähnt wird, bei dem ein TypeError aufgrund eines null-Wertes auftritt, empfiehlt es sich, die Implementierung zu überprüfen und sicherzustellen, dass die richtigen Werte übergeben werden. Oftmals können solche Fehler durch eine Fehlkonfiguration oder durch die Besonderheiten der Liquid-Template-Sprache von Shopify verursacht werden, insbesondere wenn JavaScript und Liquid zusammen verwendet werden.

Gabe | Social Care @ Shopify
 - War meine Antwort hilfreich? Klicke Like um es mich wissen zu lassen! 
 - Wurde deine Frage beantwortet? Markiere es als Akzeptierte Lösung 
 - Um mehr zu erfahren, besuche das Shopify Help Center oder den Shopify Blog

hb-manuel
Tourist
4 0 0

Wow @Gabe , danke für die extrem schnellen und umfangreichen Antworten!

Gabe
Shopify Staff
16357 2587 3853

@hb-manuel 

 

Haha, gerne, denn das interessiert mich auch! 😉

 

Habe etwas oben dazu ergänzt falls du die Page hier refreshen möchtest, Manuel!

Gabe | Social Care @ Shopify
 - War meine Antwort hilfreich? Klicke Like um es mich wissen zu lassen! 
 - Wurde deine Frage beantwortet? Markiere es als Akzeptierte Lösung 
 - Um mehr zu erfahren, besuche das Shopify Help Center oder den Shopify Blog