Das WeChat-Applet implementiert einen einfachen Rechner

Das WeChat-Applet implementiert einen einfachen Rechner

Der einfache Rechner des WeChat-Applets dient Ihnen als Referenz. Die spezifischen Inhalte sind wie folgt

1. Einleitung

1. Infix-Ausdruck

Infix-Ausdrücke sind eine allgemeine Methode zum Ausdrücken arithmetischer oder logischer Formeln, bei der Operatoren in Infix-Form zwischen Operanden platziert werden. Infix-Ausdrücke sind eine häufig verwendete Methode zur arithmetischen Darstellung.

Obwohl es für das menschliche Gehirn leicht ist, Infixausdrücke zu verstehen und zu analysieren, sind sie für Computer sehr komplex. Daher ist es bei der Berechnung des Werts eines Ausdrucks normalerweise erforderlich, den Infixausdruck vor der Auswertung in einen Präfix- oder Postfixausdruck umzuwandeln. Für einen Computer ist es sehr einfach, einen Präfix- oder Postfix-Ausdruck auszuwerten.

2. Postfix-Ausdruck

Scannen Sie den Ausdruck von links nach rechts. Wenn Sie eine Zahl finden, schieben Sie diese in den Stapel. Wenn Sie einen Operator finden, schieben Sie die beiden Zahlen oben in den Stapel, verwenden Sie den Operator, um entsprechende Berechnungen an ihnen durchzuführen (nächstes oberstes Element op + oberstes Element des Stapels) und schieben Sie das Ergebnis in den Stapel. Wiederholen Sie den obigen Vorgang bis zum äußersten rechten Ende des Ausdrucks. Der durch die Berechnung erhaltene Endwert ist das Ergebnis des Ausdrucks.

Beispiel:

(1) 8+4-62 kann wie folgt ausgedrückt werden:
8 4+6 2-
(2) 2*(3+5)-4+7/1 kann wie folgt ausgedrückt werden:
3 5+2*7 1/4-+

Beispielsweise der Postfix-Ausdruck "3 4 + 5 × 6 -":

(1) Von links nach rechts scannen und 3 und 4 in den Stapel schieben;
(2) Der Operator „+“ wird angetroffen und daher werden 4 und 3 ausgegeben (4 ist das oberste Element des Stapels, 3 ist das vorletzte Element, beachten Sie den Vergleich mit dem Präfixausdruck), der Wert von 3+4 wird berechnet, 7 wird erhalten und 7 wird auf den Stapel gelegt.
(3) Schiebe 5 in den Stapel;
(4) Als nächstes folgt der ×-Operator, der 5 und 7 ausgibt, 7×5=35 berechnet und 35 auf den Stapel legt.
(5) Schiebe 6 in den Stapel;
(6) Schließlich berechnet der - Operator den Wert 35-6, also 29, und liefert uns damit das Endergebnis.

2. Programmcode

1. Code

Der Konfigurationscode von app.js lautet wie folgt:

// app.js
App({
  beim Starten() {
    // Lokale Speicherkapazitäten anzeigen const logs = wx.getStorageSync('logs') || []
    logs.unshift(Datum.jetzt())
    wx.setStorageSync('Protokolle', Protokolle)

    // Anmelden wx.login({
      Erfolg: res => {
        // Sende res.code an das Backend im Austausch gegen openId, sessionKey, unionId
      }
    })
  },
  globalData: {
    Benutzerinfo: null
  },
  
  Kalkulator:
    express:'', //temporärer String strList:[], //Infix-Ausdrucksspeicher (Warteschlange First-In, First-Out)
    strListP:[], // Suffix-Ausdruck (Warteschlange First-In, First-Out)
    list:[], //Speichere den Stapel der Operatoren (first in, last out)
    berechnen:[] //Ausdrucksstapel berechnen (first in, last out)
  }
})

2. Logikcode

Der Code von calculator.js lautet wie folgt:

// Seiten/Rechner/Rechner.js
const app = getApp()
Seite({
  /**
   * Ausgangsdaten der Seite */
  Daten: {
    Operatoren: ['AC', 'DEL', '%', '/', '7', '8', '9', '×', '4', '5', '6', '+', '1', '2', '3', '-', '0', '.'],
    res: '=',
    Ausdruck: '0',
  },

  Alles löschen() {
    dies.setData({
      Ausdruck: '0',
      Ergebnis: ''
    })
  },

  Klick: Funktion (Ereignis) {
    const val = Ereignis.Ziel.Datensatz.Wert;

    wenn (Wert == 'AC') {
      dies.clearAll();
    } sonst wenn (Wert == 'DEL') {
      wenn (dieser.Daten.Ausdruck != '0') {
        const res = this.data.expression.substr(0, this.data.expression.length - 1);
        dies.setData({
          Ausdruck: res
        })
      }
    } anders {
      var len = dieser.Datenausdruck.Länge;
      var s = this.data.expression.substring(Länge - 1, Länge);
      wenn ((dieser.checkOperator(s)) && dieser.checkOperator(val)) {
        const res = this.data.expression.substr(0, this.data.expression.length);
        dies.setData({
          Ausdruck: res
        })
      } anders {
        wenn ((dieser.Datenausdruck == '0') && (Wert == '.')) {
          dies.setData({
            Ausdruck: this.data.expression + String(val)
          })
        } anders {
          dies.setData({
            Ausdruck: this.data.expression === '0' ? Wert : this.data.expression + String(Wert)
          })
        }
      }

    }

  },

  Ergebnis() {
    app.calculator.strList.length = 0;
    app.calculator.strListP.length = 0;
    app.rechner.list.length = 0;
    app.rechner.berechnen.länge = 0;

    dies.expressToStrList(dieses.data.expression);

    let tempList = app.calculator.strList;
    Dies.expressToStrListP(tempList);

    let tempP = app.calculator.strListP
    für (lass m in tempP) {
      wenn (this.checkOperator(tempP[m])) {
        lass op1 = app.calculator.calculate[0];
        app.rechner.berechnen.shift();
        lass op2 = app.calculator.calculate[0];
        app.rechner.berechnen.shift();
        app.calculator.calculate.unshift(this.countDetail(op2, tempP[m], op1));
      } anders {
        app.calculator.calculate.unshift(tempP[m])
      }
    }
    dies.setData({
      Ergebnis: app.calculator.calculate[0]
    });
  },

  AnzahlDetail(Anzahl1, Operator, Anzahl2) {
    lass Ergebnis = 0,0;
    versuchen {
      wenn (Operator == "×") {
        Ergebnis = parseFloat(num1) * parseFloat(num2);
      } sonst wenn (Operator == "/") {
        Ergebnis = parseFloat(num1) / parseFloat(num2);
      } sonst wenn (Operator == "%") {
        Ergebnis = parseFloat(num1) % parseFloat(num2);
      } sonst wenn (Operator == "+") {
        Ergebnis = parseFloat(num1) + parseFloat(num2);
      } anders {
        Ergebnis = parseFloat(num1) – parseFloat(num2);
      }
    } Fehler abfangen {

    }
    Ergebnis zurückgeben;
  },

  expressToStrListP(tempList) { //Konvertiere den Infix-Ausdruckssatz in einen Postfix-Ausdruckssatz für (let item in tempList) {
      wenn (this.checkOperator(tempList[item])) {
        wenn (app.calculator.list.length == 0) {
          app.calculator.list.unshift(tempList[item]);
        } anders {
          wenn (this.compaerOperator(app.calculator.list[0], tempList[item])) {
            für (let x in app.calculator.list) {
              app.calculator.strListP.push(app.calculator.list[x]);
            }
            app.rechner.list.length = 0;
            app.calculator.list.unshift(tempList[item]);
          } anders {
            app.calculator.list.unshift(tempList[item]);
          }
        }
      } anders {
        app.calculator.strListP.push(tempList[item]);
      }
    }
    wenn (App-Rechner.Liste.Länge > 0) {
      für (let x in app.calculator.list) {
        app.calculator.strListP.push(app.calculator.list[x]);
      }
      app.rechner.list.length = 0;
    }
  },

  Vergleichsoperator(op1, op2) {
    wenn ((op1 == "%" || op1 == "×" || op1 == "/") und& (op2 == "-" || op2 == "+")) {
      gibt true zurück;
    } anders {
      gibt false zurück;
    }
  },

  expressToStrList(Ausdruck) { //Zeichenfolgenausdruck in Infix-Warteschlange umwandeln let temp = '';
    für (lass i = 0; i < Ausdruck.Länge; i++) {
      wenn (i == 0 && Ausdruck[i] == "-") {
        temp = temp + Ausdruck[i];
      } anders {
        wenn (this.checkDigit(Ausdruck[i])) {
          temp = temp + Ausdruck[i];
        } anders {
          wenn (temp.Länge > 0) {
            wenn (Ausdruck[i] == ".") {
              temp = temp + Ausdruck[i];
            } anders {
              app.calculator.strList.push(parseFloat(temp));
              temp = '';
              app.calculator.strList.push(Ausdruck[i]);
            }
          } anders {
            temp = temp + Ausdruck[i];
          }
        }
      }
    }
    wenn (temp.length > 0 und this.checkDigit(temp.substring(temp.length - 1))) {
      app.calculator.strList.push(parseFloat(temp));
      temp = '';
    }
  },

  //Beurteilen, ob es sich um einen Operator handelt checkOperator(input) {
    wenn (Eingabe == "-" || Eingabe == "+" || Eingabe == "/" || Eingabe == "%" || Eingabe == "×") {
      gibt true zurück;
    } anders {
      gibt false zurück;
    }
  },

  // Prüfen ob es eine Zahl ist checkDigit(input) {
    wenn ((/^[0-9]*$/.test(Eingabe))) {
      gibt true zurück;
    } anders {
      gibt false zurück;
    }
  },
})

3. Schnittstellencode

Der Code von calculator.js lautet wie folgt:

<!--pages/rechner/rechner.wxml-->
<view class="Container">
  <Ansichtsklasse="Anzeiger">
     <view class="text">{{Ausdruck}}</view>
     <view class="Ergebnis">={{Ergebnis}}</view>
    </Ansicht>
  <Ansichtsklasse="btnArea">
    <block wx:für="{{Operatoren}}">
        <view class="btn" data-value="{{item}}" capture-bind:tap="click">{{item}}</view>
    </block>
    <view class="btn btn1" data-value="{{res}}" bindtap="result">{{res}}</view>
  </Ansicht>
</Ansicht>

4. Stilcode

Der Code von calculator.js lautet wie folgt:

/* Seiten/Rechner/Rechner.wxss */
  .container1{
    Breite: 100 %;
    Höhe: 100%;
  }

  .displayer{
    Rand: 1px durchgezogen #f1f3f3;
    Breite: 100 %;
    Höhe: 602![Bildbeschreibung hier einfügen](https://img-blog.csdnimg.cn/20210328162054440.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzNDI4MjE5,size_16,color_FFFFFF,t_70#pic_center)
rpx;
    Schriftgröße: 45rpx;
    Hintergrundfarbe: rgba(241, 243, 243, 1.0);
  }
.btnArea{
  Anzeige: Flex;
  Flex-Flow: Zeilenumbruch;
  Inhalt ausrichten: Flex-Start;
  Polsterung: 3rpx;
  Rand: 0;
  Hintergrundfarbe: rgb(241, 243, 243);
}
  .btn{
    Breite: 185rpx;
    Anzeige: Flex;
    Elemente ausrichten: zentrieren;
    Höhe: 120rpx;
    Inhalt ausrichten: zentriert;
    Rand: 1rpx durchgezogen #e8eaeb;
    Farbe: Schwarz;
    Hintergrundfarbe: #F7F8F9;
  }
  .btn1{
    Breite: 370rpx;
  }
  .Text{
    Breite: 100 %;
    Höhe: 10%;
    Textausrichtung: rechts;
    Rand oben: 470rpx;
    Hintergrundfarbe: rgba(241, 243, 243, 1.0);
    Position: absolut;
    Worttrennung: Worttrennung;
  }

  .Ergebnis{
    Breite: 100 %;
    Höhe: 58rpx;
    Textausrichtung: rechts;
    Rand oben: 530rpx;
    Hintergrundfarbe: rgba(241, 243, 243, 1.0);
    Position: absolut;
    Worttrennung: Worttrennung;
  }

3. Programm-Screenshots

IV. Fazit

Verwenden Sie ein Array, um einen Stapel zu implementieren, konvertieren Sie den Ausdruck dann in einen Infix-Ausdruck und dann in einen Postfix-Ausdruck und verwenden Sie den Stapel, um die Berechnung zu implementieren.

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Implementieren von Rechnerfunktionen mit dem WeChat-Applet
  • Das WeChat-Applet implementiert eine einfache Taschenrechnerfunktion
  • WeChat-Applet implementiert Taschenrechnerfunktion
  • Beispiel für einen WeChat-Applet-Rechner
  • WeChat-Applet implementiert Taschenrechnerfunktion
  • Das WeChat-Applet implementiert eine einfache Taschenrechnerfunktion
  • Das WeChat-Applet implementiert einen einfachen Rechner
  • Codebeispiel für die Implementierung eines einfachen Rechners für das WeChat-Applet
  • Beispiel für einen WeChat-Applet-Rechner

<<:  Detaillierte Erklärung, wie Sie den Speicherverbrauch in MySql reduzieren können

>>:  Tipps zur Verwendung des Befehls „Docker Inspect“

Artikel empfehlen

Implementierung der Nginx-Domänennamenweiterleitung

Einführung in Nginx Nginx („engine x“) ist ein le...

3 Möglichkeiten, die maximale Anzahl von Verbindungen in MySQL richtig zu ändern

Wir alle wissen, dass die standardmäßige MySQL-Da...

MySQL-Abfrageoptimierung: Eine Tabellenoptimierungslösung für 1 Million Daten

1. Abfragegeschwindigkeit von zwei Abfrage-Engine...

Zusammenfassung der Lastausgleichsmethoden von Nginx

Um den Lastenausgleich zu verstehen, müssen Sie s...

Installations- und Konfigurationstutorial von MySQL 8.0.16 unter Win10

1. Entpacken Sie MySQL 8.0.16 Der Ordner dada und...

Detaillierte Erläuterung des React setState-Datenaktualisierungsmechanismus

Inhaltsverzeichnis Warum setState verwenden? Verw...

Lokale Vue-Komponentendatenfreigabe Vue.observable()-Nutzung

Wenn Komponenten detaillierter werden, treten Sit...

Implementierungsschritte zum Installieren einer Java-Umgebung in Docker

Dieser Artikel basiert auf Linux CentOS8, um Dock...

Einfaches Grafik-Tutorial zur Verwendung von Adobe Brackets

Adobe Brackets ist eine Open Source-, einfache un...

Tutorial zur HTML-Tabellenauszeichnung (4): Rahmenfarbenattribut BORDERCOLOR

Um die Tabelle zu verschönern, können Sie untersc...

So implementieren Sie Zeilenumbrüche im Texteingabebereich von Textarea

Wenn Sie den Text im Textarea-Eingabebereich umbre...

Prometheus überwacht MySQL mithilfe der Grafana-Anzeige

Inhaltsverzeichnis Prometheus überwacht MySQL übe...

Vue verwendet die Element-el-upload-Komponente, um auf die Grube zu treten

Inhaltsverzeichnis 1. Grundlegende Verwendung 2. ...