簡體   English   中英

統一計算器,c#

[英]calculator in unity, c#

伙計們。 我正在嘗試統一創建一個計算器,但我被卡住了,我的計算器可以接收兩個以上的數字,我只能做像“1+1”這樣的方程式,我不能做“11+1 或 11+22” ,計算器不會收到。 此外,它不能接受像“2.5 或 13.1”這樣的小數,但它會給出雙倍的答案。

這是代碼:

using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;

public class Calculator : MonoBehaviour
    {   
    public TextMeshProUGUI InputText;
    public bool Action;
    private double _result;
    private double _input1;
    private double _input2;
    private string _operator;
    
    ## Heading ##
    // Start is called before the first frame update
    void Start()
    {
        
    }
    public void ClickNumber(int val){
        Debug.Log( message: $" check val: {val}");
        InputText.text = $"{val}";
        if (_input1 == 0){
            _input1 = val;
        }
        else{
            _input2 = val;
        }

    }

    public void ClickOperator(string val){
        Debug.Log( message: $" ClickOperator: {val}");
        _operator = val;

    }

    public void ClickEqual(string val){
        Debug.Log( message: $" ClickEqual: {val}");
        if (_input1 != 0 && _input2 != 0 && !string.IsNullOrEmpty(_operator)){
            switch (_operator){
                case "+":
                    _result = _input1 + _input2;
                    break;
                case "-":
                    _result = _input1 - _input2;
                    break;
                case "x":
                    _result = _input1 * _input2;
                    break;
                case "/":
                    _result = _input1 / _input2;
                    break;

                case "%":
                    _result = _input2/100.0d;
                    Action = true;
                    break;

            } 
        InputText.SetText(_result.ToString());
        ClearInput();
     }
    

    
    }

    public void ClickDecimal(string val){
        Debug.Log( message: $" ClickDecimal: {val}");
         InputText.text = $"{val == "."}";
        
       
    }

    public void ClearCalc(string val){
        Debug.Log( message: $" ClearCalc: {val}");
         InputText.text = $"";
        
    }
    private void ClearInput(){
        _input1 = 0;
        _input2 = 0;
    }
    
    }

將 input1 設為List<int>這樣,您可以將數字添加到列表中,並通過乘以 10 index將其轉換為雙精度數。 索引將是它所在的位置值。例如,{1, 2, 3} 將是 1 * 10 2 + 2 * 10 1 + 3 * 10 0 = 123。

    public TextMeshProUGUI InputText;
    public bool Action;
    private double _result;
    //private double _input1;
    //private double _input2;
    private List<int> _input1;
    private List<int> _input2;
    private string _operator;

    void Start()
    {
        _input1 = new();
        _input2 = new();
    }


    public void ClickNumber(int val){
        Debug.Log( message: $" check val: {val}");
        InputText.text = $"{val}";
        if (_operator == ""){
            _input1.Insert(0, val);
        }
        else{
            _input2.Insert(0, val);
        }
    }
...
    public void ClickEqual(string val){
        Debug.Log( message: $" ClickEqual: {val}");
        double _dinput1 = 0;
        double _dinput2 = 0;
        for (int i = 0; i < _input1.Count; i++) {
            _dinpit1 += _input1[i] * Mathf.Pow(10, i);
        }
        for (int i = 0; i < _input2.Count; i++) {
            _dinpit2 += _input2[i] * Mathf.Pow(10, i);
        }
        if (_dinput1 != 0 && _dinput2 != 0 && !string.IsNullOrEmpty(_operator)){
            switch (_operator){
                case "+":
                    _result = _dinput1 + _dinput2;
                    break;
                case "-":
                    _result = _dinput1 - _dinput2;
                    break;
                case "x":
                    _result = _dinput1 * _dinput2;
                    break;
                case "/":
                    _result = _dinput1 / _dinput2;
                    break;

                case "%":
                    _result = _dinput2/100.0d;
                    Action = true;
                    break;

            } 
        InputText.SetText(_result.ToString());
        ClearInput();
     }
...
    private void ClearInput(){
        _input1 = new();
        _input2 = new();
        _operator = "";
    }

(未經測試的代碼)讓我知道評論中的錯誤:)

你應該用 12 + 0 來測試它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM