using UnityEngine;
using TMPro;
public class Calculator : MonoBehaviour
{
public TMP_Text exprText; // верхняя строка (выражение)
public TMP_Text resultText; // большая строка (число)
string a = ""; // первое число
string op = ""; // действие
string b = ""; // второе число
bool done = false; // true, если только что нажали "="
void Start()
{
Show();
}
// Показываем всё на экране
void Show()
{
exprText.text = a + " " + op + " " + b;
if (b != "") resultText.text = b;
else if (a != "") resultText.text = a;
else resultText.text = "0";
}
// Добавляем цифру или точку к числу
string AddDigit(string str, string d)
{
if (d == ".")
{
if (str.Contains(".")) return str; // вторую точку не ставим
if (str == "") return "0.";
}
if (str == "0" && d != ".") return d; // убираем лишний ноль
return str + d;
}
// Кнопки 0-9 и "."
public void PressNumber(string d)
{
if (done)
{
a = "";
done = false;
}
if (op == "") a = AddDigit(a, d);
else b = AddDigit(b, d);
Show();
}
// Кнопки + - * / ^ %
public void PressOp(string o)
{
if (a == "") return;
if (b != "") Calculate(); // если уже есть два числа, сначала считаем
op = o;
done = false;
Show();
}
// Кнопка "="
public void Calculate()
{
if (a == "" || op == "" || b == "") return;
double x = double.Parse(a, System.Globalization.CultureInfo.InvariantCulture);
double y = double.Parse(b, System.Globalization.CultureInfo.InvariantCulture);
double r = 0;
if (op == "+") r = x + y;
if (op == "-") r = x - y;
if (op == "*") r = x * y;
if (op == "^") r = System.Math.Pow(x, y);
if (op == "%") r = x % y;
if (op == "/")
{
if (y == 0)
{
ClearAll();
resultText.text = "Деление на 0";
return;
}
r = x / y;
}
exprText.text = a + " " + op + " " + b + " =";
a = System.Math.Round(r, 10).ToString(System.Globalization.CultureInfo.InvariantCulture);
op = "";
b = "";
done = true;
resultText.text = a;
}
// Кнопка "C"
public void ClearAll()
{
a = "";
op = "";
b = "";
done = false;
Show();
}
}