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ă). doublepentru sume de bani:0.1 + 0.2nu este exact0.3. Foloseștedecimal(0.1m).Math.Abs(int.MinValue)aruncăOverflowException, pentru că valoarea pozitivă nu încape înint.
Comenzi înrudite
Random și Random.Shared: Generează numere pseudo-aleatorii: Next(min, max), NextDouble, amestecare cu Shuffle și alegere cu GetItems.Formatarea numerelor și string.Format: Specificatori de format (N2, F1, D5, X) și aliniere în string.Format, ToString și șiruri interpolate, cu cultura ro-RO.