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

62 lines
1.7 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
{
public object Calc(string @operator, object[] args)
{
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 };
}
}