我有一个像12,345,678.09
这样的数字,我想将其转换为12.345.678,09
我正在考虑用.
拆分字符串,并将字符串中的逗号更改为句点,然后用逗号连接它们。
string value = "12,345,678.09";
string[] parts = value.Split(new char[]{'.'});
string wholeNumber = parts[0].Replace(",", ".");
string result = String.Format("{0},{1}", wholeNumber, parts[1]);
我觉得这种方法非常笨拙。有更好的方法吗?
答案 0 :(得分:9)
如果您的字符串中没有任何符号出现,例如'$'
,则可以这样做:
parts[0].Replace(",", "$").Replace(".", ",").Replace("$", ".");
可以肯定的是,就CPU周期而言,这并不是最理想的,但它可以保持一条线。
答案 1 :(得分:8)
正确执行此操作的方法(与非字符串混合一样正确)是使用CultureInfo
来表示您要格式化的文化。看起来你是在追随意大利文化it-IT
:
var num = 123456789.01;
var ci = new CultureInfo("it-IT");
Console.WriteLine(num.ToString("#,##0.00",ci)); //output 123.456.789,01
实例:http://rextester.com/ARWF39685
请注意,在格式字符串中,您使用,
表示“数字组分隔符”,.
表示“小数点分隔符”,但是文化信息将替换为正确的文化分隔符 - 意大利文化的术语完全相反(.
是组分隔符,,
是小数分隔符。)
答案 2 :(得分:4)
string value = "12,345,678.90";
value = string.Join(".", value.Split(',').Select(s => s.Replace(".", ",").ToArray());
答案 3 :(得分:1)
你有
string value = "12,345,678.09";
value = value.replace(",", "_").replace(".", ",").replace("_", ".")
答案 4 :(得分:0)
你可以选择:
string newString = Convert.ToDouble(oldString).ToString("#,0.##", new CultureInfo("de-DE"));
更多信息here
这一切都在你想要的一行中,并建议的方式去
您还可以使用其他文化或CultureInfo.CurrentCulture
来显示用户查看它们的方式。如果他在意大利语窗口,他将CurrentCulture == "it-IT"
和相应的数字格式。 CurrentCulture
可能就是你想要的,我假设,在我错的时候纠正我
编辑:根据Jamiecs注释格式不能以这种方式对字符串起作用,所以我添加了一个转换。但要注意:如果转换不起作用,它可能会抛出异常。所以最好在多行中使用Double.TryParse()或类似的东西。