> ## Documentation Index
> Fetch the complete documentation index at: https://dokumentation.websale.de/llms.txt
> Use this file to discover all available pages before exploring further.

# Rechnen und Vergleichen im Template

> Zwei Aufgaben aus der Praxis: die Ersparnis aus einem Kundenrabatt ausrechnen und anzeigen, und einen Bereich nur dann zeigen, wenn ein Wert in einer bestimmten Spanne liegt.

Beide Aufgaben auf dieser Seite haben denselben Kern: Ein Wert aus dem Shop soll nicht nur ausgegeben, sondern vorher verrechnet oder geprüft werden. Dafür gibt es zwei Familien von DesignControl-Tags, eine zum Rechnen und eine zum Vergleichen.

Was die Tags im Einzelnen können, steht in der Referenz. Hier geht es darum, wie sie in einer konkreten Aufgabe zusammenspielen.

Referenz: [DC- (Rechnen)](https://dokumentation.websale.de/v8s/referenz/tags/dc/rechnen.md) · [DC- (Vergleiche)](https://dokumentation.websale.de/v8s/referenz/tags/dc/vergleiche.md)

## Die Ersparnis aus einem Kundenrabatt anzeigen

Für einen Kunden ist ein globaler Rabatt von 10 Prozent auf rabattfähige Produkte hinterlegt. Auf der Produktdetailansicht soll er sehen, wie viel ihm dieser Rabatt bei diesem Produkt bringt und was er am Ende zahlt.

Nötig sind zwei Rechner: Der erste ermittelt den Rabattbetrag, der zweite zieht ihn vom Preis ab.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{ST-LoggedIn}
   {A-UserSubTotalDiscount}

      ~DC-CommercialCalc1_set($PR-Price$)~
      ~DC-CommercialCalc1_percent($A-UserSubTotalDiscount$)~
      Sie sparen: ~DC-CommercialCalc1~ ~WS-CurrencySymbol~

      ~DC-CommercialCalc2_set($PR-Price$)~
      ~DC-CommercialCalc2_sub($DC-CommercialCalc1$)~
      Dieses Produkt kostet Sie nur: ~DC-CommercialCalc2~ ~WS-CurrencySymbol~

   {/A-UserSubTotalDiscount}
{/ST-LoggedIn}
```

Die beiden Klammerungen davor sind nicht schmückendes Beiwerk. `{ST-LoggedIn}` sorgt dafür, dass ein nicht angemeldeter Besucher nichts davon sieht, und `{A-UserSubTotalDiscount}` greift nur, wenn für diesen Kunden überhaupt ein Rabatt hinterlegt ist. Ohne die zweite stünde bei allen übrigen Kunden "Sie sparen: 0,00 €".

`A-UserSubTotalDiscount` gibt den Rabatt in Prozent aus, deshalb passt es direkt als Argument von `_percent()`. Der Rabattsatz muss also nicht fest im Template stehen und ändert sich mit, wenn er im Kundenkonto angepasst wird.

`DC-CommercialCalc1` wird hier zweimal gelesen, einmal für die Ausgabe und einmal als Argument des zweiten Rechners. Das ist zulässig, der Wert bleibt stehen, bis Sie ihn mit `_set()` überschreiben.

Referenz: [DC-CommercialCalc1…3](https://dokumentation.websale.de/v8s/referenz/tags/dc/rechnen.md) · [A-UserSubTotalDiscount()](https://dokumentation.websale.de/v8s/referenz/tags/a-rechnungsadresse.md#a-usersubtotaldiscount) · [PR-Price](https://dokumentation.websale.de/v8s/referenz/tags/pr/grundlagen-und-produktdaten.md) · [ST-LoggedIn](https://dokumentation.websale.de/v8s/referenz/tags/st/seitenzustand-und-navigation.md)

## Einen Bereich abhängig von einem Wert anzeigen

Die Vergleichs-Tags arbeiten ausschließlich als Klammerung. Der Bereich erscheint, wenn der Vergleich zutrifft. Als Argumente nehmen sie feste Zahlen oder Einzel-Tags, wobei die Tilde des Tags durch ein Dollarzeichen ersetzt wird.

### Ein Banner für Premiumkunden

Angemeldete Kunden mit einem Rabatt zwischen 3 und 5 Prozent sollen ein Banner sehen.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{ST-LoggedIn}
   {A-UserSubTotalDiscount}
      {DC-CompareDigitIBE(3,$A-UserSubTotalDiscount$,5)}

         <!-- Banner "Premiumkunde" -->

      {/DC-CompareDigitIBE(3,$A-UserSubTotalDiscount$,5)}
   {/A-UserSubTotalDiscount}
{/ST-LoggedIn}
```

Bei den beiden Spannen-Tags steht der zu prüfende Wert in der **Mitte**, die Grenzen links und rechts davon. `DC-CompareDigitIBE(3,$x$,5)` liest sich also als "3 kleiner oder gleich x kleiner oder gleich 5". `DC-CompareDigitIB()` schließt die Grenzen aus, `DC-CompareDigitIBE()` schließt sie ein.

### Ein Hinweis ab einem bestimmten Preis

Ab 99,99 Euro soll ein Hinweis erscheinen, beispielsweise auf versandkostenfreie Lieferung.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{DC-CompareDigitGTE($PR-Price$,99.99)}

   <!-- Hinweis, beispielsweise "portofrei" -->

{/DC-CompareDigitGTE($PR-Price$,99.99)}
```

> [!WARNING]
>
> **Preise als Vergleichswert sind eine Falle, und sie schnappt erst ab 1.000 zu.**
>
> Die Vergleichs-Tags räumen den übergebenen Wert selbst auf: Sie werfen alles weg, was keine Ziffer ist, und machen aus jedem Komma und jedem Punkt einen Dezimalpunkt. Bei `99,99 €` kommt dabei korrekt 99.99 heraus, das Währungszeichen stört nicht.
>
> Bei einem Preis mit Tausendertrennzeichen entsteht dagegen aus `1.234,56 €` die Zeichenfolge `1.234.56`, und davon wird nur der Teil bis zum zweiten Punkt gelesen. Verglichen wird also mit **1,234** statt mit 1234,56.
>
> Schalten Sie die Preisformatierung deshalb vor dem Vergleich ab und danach wieder ein, sobald die verglichenen Werte vierstellig werden können. Weil unterhalb von 1.000 alles richtig aussieht, fällt der Fehler beim Testen mit kleinen Beträgen nicht auf.

Wegweiser: [Preisformatierung an bestimmten Stellen aufheben](https://dokumentation.websale.de/v8s/preise/preisformatierungen.md#preisformatierung-an-bestimmten-stellen-aufheben)

Beim Rechnen stellt sich das Problem nicht. `DC-CommercialCalc1…3` schaltet die Preisformatierung für die Dauer der Auswertung von sich aus ab und übernimmt den Wert unverfälscht.

Feste Zahlen im Argument schreiben Sie ohne Tausendertrennzeichen und mit einem Punkt als Dezimaltrenner, also `99.99` und nicht `99,99` oder `1.099,00`.

## Die Vergleichs-Tags im Überblick

| Tag | Der Bereich erscheint, wenn |
| - | - |
| `DC-CompareDigitLT(a,b)` | a kleiner als b ist |
| `DC-CompareDigitLTE(a,b)` | a kleiner oder gleich b ist |
| `DC-CompareDigitGT(a,b)` | a größer als b ist |
| `DC-CompareDigitGTE(a,b)` | a größer oder gleich b ist |
| `DC-CompareDigitIB(a,b,c)` | b zwischen a und c liegt, Grenzen ausgeschlossen |
| `DC-CompareDigitIBE(a,b,c)` | b zwischen a und c liegt, Grenzen eingeschlossen |

Für den Vergleich von Texten statt Zahlen gibt es `DC-CompareStringInList()`. Damit prüfen Sie, ob ein Wert einem anderen entspricht oder in einer Liste vorkommt, beispielsweise ob das Lieferland zu einer Gruppe von Ländern gehört.

Referenz: [DC-CompareStringInList()](https://dokumentation.websale.de/v8s/referenz/tags/dc/vergleiche.md) · Grundlagen: [Grundlagen zu Tags](https://dokumentation.websale.de/v8s/grundlagen-zu-tags.md)

## Verwandte Themen

* Wegweiser: [Versandarten anlegen, kundenindividueller Rabatt auf die Versandkosten](https://dokumentation.websale.de/v8s/versandarten-anlegen/versandarten-anlegen.md)
* Wegweiser: [Zahlungsarten anlegen, kundenindividueller Rabatt auf die Zahlungskosten](https://dokumentation.websale.de/v8s/zahlungsarten-anlegen/zahlungsarten-anlegen.md)
* Referenz: [DC- (Rechnen)](https://dokumentation.websale.de/v8s/referenz/tags/dc/rechnen.md)


## Related topics

- [Anwendungsbeispiele](https://dokumentation.websale.de/v8s/anwendungsbeispiele/anwendungsbeispiele.md)
- [Adventskalender](https://dokumentation.websale.de/v8s/anwendungsbeispiele/appex-adventskalender.md)
- [Angebote an Kunden erstellen (B2B)](https://dokumentation.websale.de/v8s/anwendungsbeispiele/appex-angebote-an-kunden-b2b.md)
- [DC- (Zähler und Rechnen)](https://dokumentation.websale.de/v8s/referenz/tags/dc/rechnen.md)
- [WS-DataFlowManager: Tag-Referenz](https://dokumentation.websale.de/v8s/schnittstellen/marketing-seo-und-portale/ws-dataflowmanager/tag-referenz.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.