双ToString保持"en-US"格式
Double ToString keeping "en-US" format
听起来很简单-我知道它是…但我有问题,不知道究竟为什么…
我有一个web应用程序全球化(多语言)。当我单击更改语言时,这是我的操作:
public ActionResult ChangeCulture(string lang)
{
Thread.CurrentThread.CurrentCulture = new CultureInfo(lang);
Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
var languageCookie = new HttpCookie("_language") { Value = lang, Expires = DateTime.UtcNow.AddYears(1) };
Response.Cookies.Remove("_language");
Response.SetCookie(languageCookie);
return Redirect(Request.UrlReferrer.PathAndQuery);
}
我有一个页面显示一些字符(我使用chart.js),我需要绑定一个List<double>
到javascript数组。
所以这个列表看起来像:
var list = new List<double> {144, 0, 540.23};
和我需要一个简单的数组在javascript:
var arr = [144, 0, 540.23];
我是这样做的(剃刀):
var arr = [@string.Join(",", Model.ListWithDoubles.Select(x => Convert.ToString(x, new CultureInfo("en-US"))))]
问题是:
当我使用英语的时候,它的效果很好。其他语言给我的是整数…
var arr = [144, 0, 540.23]; //en-US
var arr = [144, 0, 54023]; //pt-BR
var arr = [144, 0, 54023]; //it
var arr = [144, 0, 54023]; //es
- 为什么?
- 如何修复?
因为在其他一些非en-US
文化中,,
和.
具有完全相反的含义和用法。如果不显示此数据,仅用于图表目的,则使用CultureInfo。将双精度类型转换为HTML的字符串表示形式时。您应该只在希望实际可视地向用户显示该数据值时转换为特定区域性字符串。
var arr = [@string.Join(",", Model.ListWithDoubles.Select(x => Convert.ToString(x, CultureInfo.InvariantCulture)))]
double
的默认格式说明符是G
,因此它将只创建带有十进制分隔符的输出。因为您想要原始数字(未为显示而格式化),那么您需要传递的是this (CultureInfo.InvariantCulture),而不是仅用于显示的区域性格式化字符串表示形式。
为了说明我所发布的代码无论当前线程的文化如何都可以工作,这里是该代码。将其放入控制台应用程序中,替换Main
方法并运行它。您将看到这是有效的。你的问题在别处,而不是这段代码。
static void Main(string[] args)
{
var cultures = new[] {"en-US", "pt-BR", "it", "es"};
var list = new List<double> {144, 0, 540.23};
Console.WriteLine("Without specifying a culture");
foreach (var culture in cultures.Select(isoCulture => new CultureInfo(isoCulture)))
{
System.Threading.Thread.CurrentThread.CurrentCulture = culture;
System.Threading.Thread.CurrentThread.CurrentUICulture = culture;
Console.WriteLine("Culture: " + culture.Name);
Console.WriteLine("Not defined: " + string.Join(",", list.Select(x => Convert.ToString(x))));
Console.WriteLine("CultureInfo.InvariantCulture: " + string.Join(",", list.Select(x => Convert.ToString(x, CultureInfo.InvariantCulture))));
}
Console.ReadLine(); // stops so you can see the results
}
相关文章:
- 如何使用javascript或html下载PDF格式的填写表单
- 货币代码为欧元-金额的格式不应包含小数
- Json数据包含日期和时间格式
- Javascript日期格式类似于ISO,但本地
- 铬:“;未捕获的语法错误:意外的标记:"
- 可以设置“;文件名"发生错误时显示的内联脚本标记的
- JS表单提交"无法使用Chrome数据保护程序加载此页面.尝试重新加载页面.调试信息:POST CISmtuK
- 检测电话窃听,即:<a href="电话:xxx">在UIWebview上
- 更改angularjs中的日期-时间格式
- 将日期时间从json转换为可读格式
- NodeJS日期格式不起作用
- 我能得到正确的格式吗
- 使用“+="操作人员
- PHP:显示sqlite数据库中的html格式数据,使用tinymce保存
- 你能用“-"而不是“/"使用JavaScript短日期格式
- "格式不正确的JSON流”;当从SharePoint 2013 REST API对文件使用moveto或cop
- jQplot格式字符串"%n〃;
- "XML解析错误:格式不正确“;在斐波那契数生成中
- 将YouTube API持续时间(ISO 8601格式的持续时间)转换为h:m:s,当格式中没有"T"
- 验证特定格式而不使用“-"以拆分字符串