如何使用正确的cultureinfo将字符串转换为double
我在数据库中有两个nvarchar字段来存储DataType和DefaultValue,并且我有一个DataType Double和值为65.89875的英文格式。
现在我希望用户根据所选的浏览器语言格式查看值(英语中的65.89875应显示为德语中的65,89875)。 现在,如果用户从德语格式编辑为65,89875(英语为65.89875),而其他用户从英文浏览器查看则为6589875。
这是因为在它的数据库中nvarchar列被存储为65,89875和使用英语的文化转变,当它变成6589875因为它认为,
作为分隔符是德国十进制运算符。
我如何才能在所有浏览器中工作?
您需要定义一个您将用于存储在数据库中的数据的区域设置,不变的文化就是为了这个目的。
当您显示转换为本机类型,然后格式化为用户的文化。
例如显示:
string fromDb = "123.56";
string display = double.Parse(fromDb, CultureInfo.InvariantCulture).ToString(userCulture);
储藏:
string fromUser = "132,56";
double value;
// Probably want to use a more specific NumberStyles selection here.
if (!double.TryParse(fromUser, userCulture, NumberStyles.Any, out value)) {
// Error...
}
string forDB = value.ToString(CultureInfo.InvariantCulture);
PS。 几乎不用说,使用与数据匹配的数据类型的列会更好(但有时候遗留问题也适用)。
在FormatProviders的帮助下,您可以将用户提供的值转换为double,然后再将其存储为nvarchar。 CultureInfo是一个典型的FormatProvider。 假设你知道你正在运作的文化,
System.Globalization.CultureInfo EnglishCulture = new System.Globalization.CultureInfo("en-EN");
System.Globalization.CultureInfo GermanCulture = new System.Globalization.CultureInfo("de-de");
就可以做足够的转变,就像;
double val;
if(double.TryParse("65,89875", System.Globalization.NumberStyles.Float, GermanCulture, out val))
{
string valInGermanFormat = val.ToString(GermanCulture);
string valInEnglishFormat = val.ToString(EnglishCulture);
}
if(double.TryParse("65.89875", System.Globalization.NumberStyles.Float, EnglishCulture, out val))
{
string valInGermanFormat = val.ToString(GermanCulture);
string valInEnglishFormat = val.ToString(EnglishCulture);
}
你可以改变你的UI文化到你想要的任何东西,但是你应该像这样改变数字分隔符:
CultureInfo info = new CultureInfo("fa-IR");
info.NumberFormat.NumberDecimalSeparator = ".";
Thread.CurrentThread.CurrentCulture = info;
Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
有了这个,你的字符串就像这样转换:“12.49”而不是“12,49”或“12/49”
链接地址: http://www.djcxy.com/p/13053.html上一篇: How to convert string to double with proper cultureinfo