Files
S8n.MySolutionTemplate/S8n.Components.Packages/Basics/Calculator.cs

72 lines
2.0 KiB
C#
Raw Normal View History

2026-02-10 14:42:19 +03:00
using System.Text.Json;
namespace S8n.Components.Basics;
public class Calculator
{
2026-02-10 23:25:42 +03:00
public object Execute(string @operator, object[] args)
2026-02-10 14:42:19 +03:00
{
if (args == null || args.Length < 2)
{
throw new ArgumentException("At least two arguments are required");
}
// Convert arguments to decimal for precision, handling JsonElement
var numbers = args.Select(a =>
{
if (a is JsonElement jsonElement)
{
return jsonElement.GetDecimal();
}
return Convert.ToDecimal(a);
}).ToArray();
decimal result = 0;
switch (@operator?.ToLower())
{
case "add":
result = numbers.Sum();
break;
case "subtract":
result = numbers[0];
for (int i = 1; i < numbers.Length; i++)
{
result -= numbers[i];
}
break;
case "multiply":
result = numbers[0];
for (int i = 1; i < numbers.Length; i++)
{
result *= numbers[i];
}
break;
case "divide":
result = numbers[0];
for (int i = 1; i < numbers.Length; i++)
{
if (numbers[i] == 0)
{
throw new DivideByZeroException("Division by zero is not allowed");
}
result /= numbers[i];
}
break;
default:
throw new ArgumentException($"Unknown operator: {@operator}");
}
return new { Result = result };
}
2026-02-11 02:12:03 +03:00
public object Reset(string @operator, object[] args)
{
// Return default inputs (operator = "add", args = [0, 0])
return new
{
@operator = "add",
args = new decimal[] { 0, 0 }
};
}
2026-02-10 14:42:19 +03:00
}