我正在编写一个 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();
}
Run Code Online (Sandbox Code Playgroud)
这一切都很好,我遇到的小问题是该Outflow
属性是一个浮点数,并且我的语言环境使用逗号作为十进制分隔符,这在CSV 中显然是一个很大的问题,所以不是让我们说 10.50 它会输出 10,50,有什么简单的方法可以解决这个问题吗?
您可以指定使用的不变文化.
:
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();
}
Run Code Online (Sandbox Code Playgroud)
在旁注中,decimal
用于金钱而不是float
:
decimal
以 10 为基数,因此它可以0.1
精确地表示小数货币值,float
以 2 为基数,但不能。使用float
会导致奇怪的舍入错误,并且比较不会按预期进行。考虑一下:
float a = 3.6f, b = 0.1f, expected = 3.7f;
float sum = a + b;
Console.WriteLine(sum == expected); // false
Run Code Online (Sandbox Code Playgroud)
这将输出 false 因为 sum 实际上是 3.69999981
您可以从深度摘录中的 C# 中阅读有关该主题的更多信息。