Để lấy giá trị tuyệt đối (absolute value) của số, dùng phương thức Math.Abs. Có nạp chồng cho mọi kiểu số: int, long, float, double, decimal, short, sbyte.
Ví dụ cơ bản
using System;
class Program
{
static void Main()
{
int val1 = 77;
int val2 = -88;
double val3 = -3.14159;
decimal val4 = -123.45m;
Console.WriteLine("Trước Abs:");
Console.WriteLine($"val1 (int) = {val1}");
Console.WriteLine($"val2 (int) = {val2}");
Console.WriteLine($"val3 (double) = {val3}");
Console.WriteLine($"val4 (decimal)= {val4}");
// Math.Abs overloads
int abs1 = Math.Abs(val1);
int abs2 = Math.Abs(val2);
double abs3 = Math.Abs(val3);
decimal abs4 = Math.Abs(val4);
Console.WriteLine("\nSau Abs:");
Console.WriteLine($"abs1 = {abs1}");
Console.WriteLine($"abs2 = {abs2}");
Console.WriteLine($"abs3 = {abs3}");
Console.WriteLine($"abs4 = {abs4}");
}
}
Kết quả
Trước Abs: val1 (int) = 77 val2 (int) = -88 val3 (double) = -3.14159 val4 (decimal)= -123.45 Sau Abs: abs1 = 77 abs2 = 88 abs3 = 3.14159 abs4 = 123.45
Lưu ý quan trọng: int.MinValue
Giá trị tuyệt đối của int.MinValue (-2,147,483,648) không biểu diễn được trong int (max = 2,147,483,647).
int min = int.MinValue; // -2147483648 int absMin = Math.Abs(min); // OverflowException trong checked context, hoặc trả về MinValue (unchecked) Console.WriteLine(absMin); // -2147483648 (undefined behavior!)
Giải pháp an toàn
public static long SafeAbs(int value)
{
if (value == int.MinValue) return 2147483648L; // long đủ lớn
return Math.Abs(value);
}
// Hoặc dùng long từ đầu
long absMinSafe = Math.Abs((long)int.MinValue); // 2147483648
Bảng overload Math.Abs
| Kiểu đầu vào | Kiểu trả về | Lưu ý |
|---|---|---|
sbyte | sbyte | |
short | short | |
int | int | ⚠️ int.MinValue overflow |
long | long | ⚠️ long.MinValue overflow |
float | float | |
double | double | |
decimal | decimal |
Mẹo: Dùng Math.Abs cho tính toán toán học. Cho so sánh khoảng cách, dùng Math.Abs(a - b).