猿问

如何使用适当的CultureInfo将字符串转换为双精度

我在数据库中有两个nvarchar字段来存储DataType和DefaultValue,并且我有一个DataType Double,其英文格式的值为65.89875。

现在,我希望用户看到与所选浏览器语言格式对应的值(英语的65.89875应该显示为德语的65,89875)。现在,如果用户从德语格式编辑为65,89875(相当于英语65.89875),而其他用户从英语浏览器查看,则为6589875。

发生这种情况的原因是,在数据库中,它以65,89875的形式存储在nvarchar列中,并且当使用英语区域性进行转换时,它变为6589875,因为它被认为,是德语的十进制运算符分隔符。

如何使它适用于所有浏览器?


繁星淼淼
浏览 501回答 3
3回答

当年话下

您需要定义一个将用于存储在数据库中的数据的语言环境,正是出于此目的,存在不变的区域性。在显示时,将转换为本机类型,然后针对用户的区域性进行格式化。例如显示: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, NumberStyles.Any, userCulture, out value)) {  // Error...}string forDB = value.ToString(CultureInfo.InvariantCulture);PS。几乎不用说,使用具有与数据匹配的数据类型的列会更好(但有时适用传统)。

慕标琳琳

您可以将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”
随时随地看视频慕课网APP
我要回答