我正在尝试编写一个函数,它基本上将字符串数组转换为字符串数组,其中数组中的所有双精度数都四舍五入为我设置的小数位数。数组中也可以有字符串,这些字符串根本不是双精度值。
string[,] values = new string[1, 3];
values[0, 0] = "hello";
values[0, 1] = "0.123";
values[0, 2] = "0,123";
int decimalPlaces = 2;
double tmp;
string format = "F" + decimalPlaces.ToString();
IFormatProvider provider = CultureInfo.InvariantCulture;
for (int i = 0; i < values.GetLength(0); i++)
{
for (int j = 0; j < values.GetLength(1); j++)
{
if (double.TryParse(values[i, j], out tmp))
{
values[i, j] = tmp.ToString(format, provider);
}
}
}
Console.ReadLine();结果必须是:"hello","0.12","0.12“,但它是"hello”,"123.00","0.12“将以错误的方式处理逗号。有没有人有简单有效的解决方案?
发布于 2012-07-19 20:13:02
您希望像对待逗号(,)一样对待点(.)。因此,请替换
if (double.TryParse(values[i, j], out tmp))使用
if (double.TryParse(values[i, j].Replace('.', ','), out tmp))发布于 2013-10-30 17:38:35
来治疗这两种病,还有。作为小数点,您不仅必须将一个替换为另一个,而且还必须确保所使用的区域性解析将其解释为小数点。
text = text.Replace(',', '.');
return double.TryParse(text, NumberStyles.Any, CultureInfo.InvariantCulture, out value);发布于 2015-02-24 17:32:45
您不需要替换逗号和点..
我也遇到过同样的问题。原因很简单,转换文化在解释逗号或点时起着很大的作用。我使用的是德国文化,用逗号来区分分数,和其他地方一样,用点来区分分数。
在这里,我做了一个完整的例子来说明不同之处。
string[] doubleStrings = {"hello", "0.123", "0,123"};
double localCultreResult;
foreach (var doubleString in doubleStrings)
{
double.TryParse(doubleString, NumberStyles.Any, CultureInfo.CurrentCulture, out localCultreResult);
Console.WriteLine(string.Format("Local culture results for the parsing of {0} is {1}", doubleString, localCultreResult));
}
double invariantCultureResult;
foreach (var doubleString in doubleStrings)
{
double.TryParse(doubleString, NumberStyles.Any, CultureInfo.InvariantCulture, out invariantCultureResult);
Console.WriteLine(string.Format("Invariant culture results for the parsing of {0} is {1}", doubleString, invariantCultureResult));
}结果如下:

玩玩文化,你会得到你想要的结果。
https://stackoverflow.com/questions/11560465
复制相似问题