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

Installationshandbuch für VMware Workstation 15 Pro (für Anfänger)

01. VMware Workstation Pro 15 herunterladen Herun...

Spezifische Verwendung von Nginx Keepalive

Der Standardanforderungsheader des http1.1-Protok...

52 SQL-Anweisungen, die Ihnen Leistungsoptimierung beibringen

1. Um die Abfrage zu optimieren, sollten Sie voll...

Detaillierte Erklärung der MySQL-Datenbank-Trigger

Inhaltsverzeichnis 1 Einleitung 2 Trigger-Einführ...

Tiefgreifendes Verständnis der JavaScript-Rückruffunktionen

Inhaltsverzeichnis Vorwort Kurzübersicht: JavaScr...

Vue-Electron-Problemlösung bei Verwendung des seriellen Ports

Der Fehler lautet wie folgt: Nicht abgefangener T...

Verwenden Sie nginx + sekundären Domänennamen + https-Unterstützung

Schritt 1: Fügen Sie dem primären Domänennamen vo...

9 großartige JavaScript-Framework-Skripte zum Zeichnen von Diagrammen im Web

9 großartige JavaScript-Framework-Skripte zum Zei...

Drei Möglichkeiten zum Konfigurieren einer JNDI-Datenquelle in Tomcat

In meiner früheren Arbeit war der Entwicklungsser...

So verwenden Sie Cursor-Trigger in MySQL

Cursor Die von der Auswahlabfrage zurückgegebenen...