如何使用正确的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

下一篇: Is Int32.ToString() culture