我想将DataGrid
个对象导出到CSV文件,然后让用户可以选择查看类型为double
的值的德语符号。
foreach (DataGridViewRow dr in dataGridView1.Rows)
{
foreach (DataGridViewColumn column in dgv1)
{
double val;
if (double.TryParse(dr.Cells[column.Name].Value.ToString(), out val))
{
sw.Write(string.Format(System.Globalization.CultureInfo.GetCultureInfo("de-DE"), "{0:0.0}", val));
sw.Write(",");
}
}
}
sw
这是一个新的StreamWriter
对象。
我正在使用正确的文化,但是当我看到结果时,我看到应该是什么,例如,#18; 18,54",是18,并且在旁边的单元格中它有一个5,后跟一个点(。)。我在这段代码中做错了什么?
答案 0 :(得分:2)
曾经有同样的问题。
该值被分成两个单元格,因为德语数字逗号“,”只是csv中的分隔符。我做的是使用分号“;”作为一个分离者,OpenOffice以某种方式做了正确的事情。 (自动,或者我在打开时指定了编码,不记得了。)
哦,我刚在维基百科上发现了这个:
Year;Make;Model;Length
1997;Ford;E350;2,34
2000;Mercury;Cougar;2,38
后一种格式不符合RFC 4180。可以通过 使用逗号 而不是分号作为分隔符以及用于表示小数标记的国际表示法或的实践来实现符合性引用带小数点的所有数字 。
所以“1,2”,“3,4”应该是正确的。
答案 1 :(得分:0)
您只在点/逗号后显示一个位置。如果将“{0:0.0}”替换为“{0:0.00}”,则应显示18,54。有关格式化浮点数的详细信息,请参阅此站点:http://www.csharp-examples.net/string-format-double/
逗号是用来代替点的德语字符,所以它在csv上不能很好地工作。那你的结果是18,5,......你应该替换你的sw.Write(“,”);用sw.Write(“;”);或其他角色,或使用数字周围的标记。
答案 2 :(得分:0)
这就是我在评论中所写的内容:
foreach (DataGridViewRow dr in dataGridView1.Rows)
{
foreach (DataGridViewColumn column in dgv1)
{
double val;
if (double.TryParse(dr.Cells[column.Name].Value.ToString(), out val))
{
sw.Write(string.Format(System.Globalization.CultureInfo.GetCultureInfo("de-DE"), "{0:0.00}", val));
sw.Write(";");
}
}
}