Math (Round, Pow, Sqrt, Clamp) în C# (.NET)

.NET BCL și CLI-ul dotnet .NET Framework 1.0 (Clamp: .NET Core 2.0)

Clasa statică Math: rotunjire, putere, radical, valoare absolută, minim/maxim și limitarea unei valori într-un interval.

Sintaxă C#
Math.Round(x, 2)   Math.Pow(2, 10)   Math.Sqrt(16)   Math.Clamp(v, min, max)

Ce face Math (Round, Pow, Sqrt, Clamp)

System.Math conține funcții matematice pentru double și, unde are sens, pentru int, long și decimal: Abs, Max, Min, Pow, Sqrt, Floor (în jos), Ceiling (în sus), Truncate, Clamp și constantele Math.PI, Math.E.

Atenție la Math.Round: implicit folosește rotunjirea bancară (MidpointRounding.ToEven), deci 2,5 devine 2 și 3,5 devine 4. Pentru rotunjirea învățată la școală dă MidpointRounding.AwayFromZero. Pentru bani folosește decimal, nu double.

Împărțirea a două int este întreagă (7 / 2 = 3); pentru rezultat cu zecimale, cel puțin un operand trebuie să fie double sau decimal.

Exemple

Exemplul 1: Funcțiile de bază

Console.WriteLine(Math.Abs(-7));
Console.WriteLine(Math.Max(3, 9));
Console.WriteLine(Math.Pow(2, 10));
Console.WriteLine(Math.Sqrt(144));
Console.WriteLine(Math.Floor(7.8));
Console.WriteLine(Math.Ceiling(7.2));
Console.WriteLine(Math.Clamp(15, 1, 10));
Console.WriteLine(7 / 2);
Console.WriteLine(7 % 2);

Rezultat

7
9
1024
12
7
8
10
3
1

Exemplul 2: Rotunjire și zecimale în cultura ro-RO

Cultura este setată explicit, ca separatorul zecimal să fie virgula indiferent de calculator.

using System.Globalization;

CultureInfo.CurrentCulture = new CultureInfo("ro-RO");

Console.WriteLine(Math.Round(2.5));
Console.WriteLine(Math.Round(3.5));
Console.WriteLine(Math.Round(2.5, MidpointRounding.AwayFromZero));
Console.WriteLine(Math.Round(19.987m, 2));
Console.WriteLine(7 / 2.0);
Console.WriteLine(Math.PI.ToString("F4"));

Rezultat

2
4
3
19,99
3,5
3,1416

Greșeli frecvente

  • Așteptarea ca Math.Round(2.5) să dea 3: implicit dă 2 (rotunjire bancară).
  • double pentru sume de bani: 0.1 + 0.2 nu este exact 0.3. Folosește decimal (0.1m).
  • Math.Abs(int.MinValue) aruncă OverflowException, pentru că valoarea pozitivă nu încape în int.

Comenzi înrudite