Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Hiển thị giá trị tuyệt đối (Absolute Value) trong C#

Để 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àoKiểu trả vềLưu ý
sbytesbyte
shortshort
intint⚠️ int.MinValue overflow
longlong⚠️ long.MinValue overflow
floatfloat
doubledouble
decimaldecimal

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).