first version

This commit is contained in:
2026-02-10 14:42:19 +03:00
parent e1b3497cd5
commit 631126a85c
10 changed files with 390 additions and 49 deletions

View File

@@ -0,0 +1,61 @@
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 };
}
}

View File

@@ -0,0 +1,9 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>