Đây là vấn đề của tôi, máy của tôi sử dụng văn hóa Pháp nên theo mặc định, nó phân tích cú pháp (3,141592) theo cách tiếng Pháp.
Nếu nền văn hóa máy không phải của Hoa Kỳ thì đây là mã để tái hiện vấn đề của tôi:
số float = 4103.2680894812f;
Đối tượng numObj = số;
double val = Double.Parse(numObj.ToString(), CultureInfo.InvariantCulture);
System.Console.WriteLine(val.ToString(CultureInfo.InvariantCulture));
Thoạt nhìn, điều này có thể hoạt động, nhưng Float ToString bị quá tải và sử dụng văn hóa, vì vậy điều này thực sự không hoạt động.
Vấn đề là những gì thực sự được trả về cho tôi chỉ là một đối tượng, vì nó có thể là Chuỗi, Float, Double hoặc Int.
Giải pháp tạm thời là sử dụng GetType() và kiểm tra, nhưng tôi muốn biết liệu có giải pháp nào sạch hơn không.
Bạn có thể sử dụng cái này:
var currentCulture = Thread.CurrentThread.CurrentCulture;
Thread.CurrentThread.CurrenCulture = CultureInfo.InvariantCulture;
thử
{
chuỗi s = numObj.ToString();
}
finally
{
Thread.CurrentThread.CurrentCulture = currentCulture;
}
Hoặc, sử dụng cái này:
string s;
var formattable = numObj là IFormattable;
nếu (có thể định dạng != null)
{
s = formattable.ToString(null, CultureInfo.InvariantCulture);
}
khác
{
s = numObj.ToString();
}
Tôi là một lập trình viên xuất sắc, rất giỏi!