Kiểu dữ liệu tốt nhất cho tiền tệ trong C# là decimal. Kiểu decimal là kiểu dữ liệu 128-bit phù hợp cho tính toán tài chính và tiền tệ. Kiểu decimal biểu diễn giá trị từ 1.0 * 10^-28 đến khoảng 7.9 * 10^28 với 28-29 chữ số có nghĩa. Để khởi tạo biến decimal, dùng hậu tố m hoặc M.
decimal b = 2.1m;
Ví dụ dưới đây cho thấy giá trị min và max của decimal.
Ví dụ
using System;
namespace DemoApplication
{
public class Program
{
public static void Main()
{
Console.WriteLine($"Decimal Min Value: {decimal.MinValue}");
Console.WriteLine($"Decimal Max Value: {decimal.MaxValue}");
Console.ReadLine();
}
}
}
Kết quả
Decimal Min Value: -79228162514264337593543950335 Decimal Max Value: 79228162514264337593543950335
Tập hữu hạn giá trị của kiểu decimal có dạng (-1)^s * c * 10^-e, với sign s là 0 hoặc 1, coefficient c là 0 <= c < 2^96, và scale e sao cho 0 <= e <= 28. Kiểu decimal không hỗ trợ signed zeros, infinities, hoặc NaN. Một decimal được biểu diễn như integer 96-bit scaled by power of ten. Với decimal có giá trị tuyệt đối < 1.0m, giá trị chính xác đến vị trí thập phân thứ 28. Với decimal >= 1.0m, giá trị chính xác 28-29 chữ số.
Khác với float và double, decimal biểu diễn chính xác các số thập phân như 0.1. Trong float/double, các số này thường là phân số vô hạn, dễ gây lỗi làm tròn.
Decimal ưu tiên hơn float/double vì độ chính xác cao hơn và phạm vi nhỏ hơn cả hai.
Ví dụ: Chuyển đổi USD sang INR
using System;
namespace DemoApplication
{
public class Program
{
public static void Main()
{
decimal usd = 2.5m;
Console.WriteLine($"USD: {usd}");
decimal inrOfOneUSD = 75.04m;
Console.WriteLine($"Giá trị INR của 1 USD: {inrOfOneUSD}");
decimal inr = usd * inrOfOneUSD;
Console.WriteLine($"Giá trị INR: {inr}");
Console.ReadLine();
}
}
}
Kết quả
USD: 2.5 Giá trị INR của 1 USD: 75.04 Giá trị INR: 187.600