Phương thức Convert.ToDecimal() chuyển đổi một giá trị xác định sang kiểu decimal (số thực thập phân độ chính xác cao, 128-bit). Hỗ trợ chuyển từ nhiều kiểu: string, int, double, float, v.v.
Ví dụ chuyển từ string có dấu phân cách nghìn
string stringVal = "2,345.26";
decimal decimalVal = Convert.ToDecimal(stringVal); // 2345.26
Mã nguồn hoàn chỉnh
using System;
public class Demo
{
public static void Main()
{
decimal decimalVal;
string stringVal = "2,345.26";
decimalVal = Convert.ToDecimal(stringVal);
Console.WriteLine("String converted to decimal = {0}", decimalVal);
}
}
Kết quả
String converted to decimal = 2345.26
Các overload phổ biến
| Kiểu đầu vào | Ví dụ | Kết quả |
|---|---|---|
| string | 123.45m | |
| int/long | 42 | 42m |
| double/float | 3.14 | 3.14m (có thể mất độ chính xác) |
| bool | true | 1m |
| object | boxed value | Unbox rồi chuyển |
Lưu ý quan trọng
- Phụ thuộc Culture: Dấu phân cách thập phân và nhóm nghìn tuỳ theo culture hiện tại hoặc
IFormatProvidertruyền vào. - Chuyển từ
double/floatcó thể gây mất độ chính xác do biểu diễn nhị phân. - Ném
FormatExceptionnếu string không đúng định dạng số. - Ném
OverflowExceptionnếu giá trị vượt quá phạm videcimal(±7.9×10²⁸).
Ví dụ với CultureInfo
// Việt Nam: dấu phẩy là thập phân, chấm là nhóm nghìn
string vn = "2.345,26";
decimal d = Convert.ToDecimal(vn, new CultureInfo("vi-VN")); // 2345.26
// Mỹ: chấm là thập phân, phẩy là nhóm nghìn
string us = "2,345.26";
decimal d2 = Convert.ToDecimal(us, CultureInfo.InvariantCulture); // 2345.26