我正在使用此代码导出* .txt
TextWriter sw = new StreamWriter(@"C:\fiscal.txt");
int rowcount = dataGridView1.Rows.Count;
for (int i = 0; i < rowcount - 1; i++)
{
sw.Write("{0,-20}", dataGridView1.Rows[i].Cells[0].Value.ToString());
}
sw.Close();
我的文本文件包含一个带逗号示例3,20
的值编号我该怎么改变它?并用点3.20
导出它答案 0 :(得分:2)
简单的解决方法是应用.NET / C#String.Replace(",", ".")
方法,但仅限于在该特定文本中没有使用“,”的其他情况;因此,以下行将很快完成工作(最佳性能):
dataGridView1.Rows[i].Cells[0].Value.ToString().Replace(",", ".")
如果使用美元符号输入值,它也可以正常工作,例如:$ 3,20(将转换为$ 3.20)。
或者,您可以将Parse()
(或TryParse())
方法与CultureInfo
类结合使用,这是一种通用解决方案,但对于此特定任务可能是“过度杀伤”,并且还需要更长的时间才能完成(即会导致显着的性能下降)。此外,如果使用主要货币符号(如上面提到的$ 3,20)输入值,解析可能会有点问题。
希望这可能会有所帮助。
答案 1 :(得分:0)
由于这是货币数据,您可以使用Decimal.TryParse
将文本转换为小数,并将文化设置为带有十进制逗号的文化(法语说):
NumberStyles style = NumberStyles.Number | NumberStyles.AllowCurrencySymbol;
decimal result;
if (decimal.TryParse(text, style, new CultureInfo("fr-FR"), out result))
{
}
然后使用使用小数点的文化(英语说)写出来:
string outputText = result.ToString("C", new CultureInfo("en-GB"));
虽然这会产生改变货币符号的副作用。为了确保保持不变,您必须克隆用于输出的文化并更改其货币符号。
答案 2 :(得分:0)
在ToString
和Parse
中使用CultureInfo.InvariantCulture
。所以在你的情况下它看起来像这样:
sw.Write("{0,-20}", dataGridView1.Rows[i].Cells[0].Value.ToString(CultureInfo.InvariantCulture));