6

我有一个这样的数字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]);

我觉得这个方法很笨拙。有更好的方法吗?

4

5 回答 5

9

如果有一个符号没有出现在你的字符串中的任何地方,比如'$',你可以这样做:

parts[0].Replace(",", "$").Replace(".", ",").Replace("$", ".");

可以肯定的是,这在 CPU 周期方面是次优的,但它在保持单行方面确实有效。

于 2012-04-23T13:18:53.490 回答
9

执行此操作的正确方法(正确的不是字符串混搭)是使用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

请注意,在格式字符串中,您,用来表示“数字组分隔符”并.表示“小数分隔符”,但文化信息用正确的文化分隔符替换它 - 就意大利文化而言,它们完全相反(.是组分隔符并且,是小数点分隔符)。

于 2012-04-23T13:35:01.353 回答
4
string value = "12,345,678.90";
value = string.Join(".", value.Split(',').Select(s => s.Replace(".", ",").ToArray());
于 2012-04-23T13:24:11.013 回答
1

你有

string value = "12,345,678.09";
value = value.replace(",", "_").replace(".", ",").replace("_", ".")
于 2012-04-23T13:34:01.437 回答
0

你可以去:

string newString = Convert.ToDouble(oldString).ToString("#,0.##", new CultureInfo("de-DE"));

更多信息在这里
这一切都在您想要的一条线上,并且是推荐的方式。
您还可以使用其他文化,或者CultureInfo.CurrentCulture,以用户查看数字的方式显示数字。如果他在意大利窗户上,他将拥有CurrentCulture == "it-IT"相应的数字格式。CurrentCulture可能是您正在寻找的我假设,当我错了时纠正我。
编辑:根据 Jamiecs 的评论格式不适用于字符串,所以我添加了一个转换。但请注意:如果转换不起作用,它可能会引发异常。所以最好多用一行并使用 Double.TryParse() 或类似的东西。

于 2012-04-23T13:41:22.923 回答