为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁星淼淼 2019-11-18 18:18:36
我在数据库中有两个nvarchar字段来存储DataType和DefaultValue,并且我有一个DataType Double,其英文格式的值为65.89875。现在,我希望用户看到与所选浏览器语言格式对应的值(英语的65.89875应该显示为德语的65,89875)。现在,如果用户从德语格式编辑为65,89875(相当于英语65.89875),而其他用户从英语浏览器查看,则为6589875。发生这种情况的原因是,在数据库中,它以65,89875的形式存储在nvarchar列中,并且当使用英语区域性进行转换时,它变为6589875,因为它被认为,是德语的十进制运算符分隔符。如何使它适用于所有浏览器?
查看完整描述

3 回答

?
当年话下

TA贡献1890条经验 获得超9个赞

您需要定义一个将用于存储在数据库中的数据的语言环境,正是出于此目的,存在不变的区域性。


在显示时,将转换为本机类型,然后针对用户的区域性进行格式化。


例如显示:


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。几乎不用说,使用具有与数据匹配的数据类型的列会更好(但有时适用传统)。


查看完整回答
反对 回复 2019-11-18
?
慕标琳琳

TA贡献1830条经验 获得超9个赞

您可以将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”


查看完整回答
反对 回复 2019-11-18
  • 3 回答
  • 0 关注
  • 500 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信