我正在编写一个csv转换器,将事务的文本文档转换为csv文档,我遇到了一个小问题。
foreach (var transaction in transactions)
{
output.Append(
string.Format("{0:dd/MM/yy},{1},{2},{3},{4:0.##},{5}",
transaction.Date,
transaction.Payee,
transaction.Category,
transaction.Memo,
transaction.Outflow,
transaction.Inflow));
output.AppendLine();
}
这一切都运行正常,我遇到的小问题是Outflow
属性是一个浮点数,我的语言环境使用逗号作为小数分隔符,这显然是 CSV 所以不要让我们说10.50它会输出10,50,有没有简单方法来解决这个问题?
答案 0 :(得分:4)
您可以指定使用.
的不变文化:
foreach (var transaction in transactions)
{
output.Append(
string.Format("{0:dd/MM/yy},{1},{2},{3},{4},{5}",
transaction.Date,
transaction.Payee,
transaction.Category,
transaction.Memo,
transaction.Outflow.ToString("F2", CultureInfo.InvariantCulture),
transaction.Inflow));
output.AppendLine();
}
在旁注上,请decimal
使用float
来代替decimal
:
0.1
是基数10,因此它可以精确地表示像float
这样的小数货币值,float
是基数2,它不能。使用float a = 3.6f, b = 0.1f, expected = 3.7f;
float sum = a + b;
Console.WriteLine(sum == expected); // false
将导致奇怪的舍入错误,并且比较将无法按预期工作。考虑一下:
3.69999981
这将输出false,因为sum实际上是{{1}}
您可以通过此C# in Depth excerpt了解有关此主题的更多信息。
答案 1 :(得分:-2)
你可以替换。像这样:
transaction.Outflow.ToString().Replace(',','.');