first version
This commit is contained in:
61
S8n.Components.Packages/Basics/Calculator.cs
Normal file
61
S8n.Components.Packages/Basics/Calculator.cs
Normal 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 };
|
||||
}
|
||||
}
|
||||
9
S8n.Components.Packages/S8n.Components.Packages.csproj
Normal file
9
S8n.Components.Packages/S8n.Components.Packages.csproj
Normal file
@@ -0,0 +1,9 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
||||
Reference in New Issue
Block a user