[英]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.