C# 使用点分隔符将double写入文本文件

C# 使用点分隔符将double写入文本文件,c#,io,text-files,streamwriter,invariantculture,C#,Io,Text Files,Streamwriter,Invariantculture,我需要在文本文件中用点分隔符写几个双精度。我知道,此代码就是解决方案: StreamWriter f = new StreamWriter(file, Encoding.ASCII, 128, false); double a = 1.057887; f.Write(a.ToString("G5", CultureInfo.InvariantCulture)); 但我有太多的数字要写,所以我尝试了以下方法: 并试图: 但是第一个“{0:0.######}”导致逗号分隔符(105789),CS0

我需要在文本文件中用点分隔符写几个双精度。我知道,此代码就是解决方案:

StreamWriter f = new StreamWriter(file, Encoding.ASCII, 128, false);
double a = 1.057887;
f.Write(a.ToString("G5", CultureInfo.InvariantCulture));
但我有太多的数字要写,所以我尝试了以下方法:

并试图:

但是第一个“{0:0.######}”导致逗号分隔符(105789),CS0120中的第二个“线程”:非静态字段、方法或属性需要对象引用

另一个问题是:

f.Write("{0:0.#####} {0:0.#####} ...", a, a, ...);
复制字符串后的第一个对象,因此即使我写入,我也会将所有数字都作为“a”

f.Write("{0:0.#####} {0:0.#####} ...", a, b, ...);

您可以通过以下方式使用
string.Format

string.Format(CultureInfo.InvariantCluture, "{0:0.###} {0:0.#####}", a)

您应该能够使用
string.Format
并指定适当的
CultureInfo
来实现此目的

例如:

string.Format(CultureInfo.InvariantCulture, "{0:0.#####} {0:0.#####} {0:0.#####} {0:0.#####} {0:0.#####}", a, a, a, a, a)
产生:

1.05789 1.05789 1.05789 1.05789 1.05789
您的文件编写代码可能会变成:

f.Write(string.Format(CultureInfo.InvariantCulture, "{0:0.#####} {0:0.#####} {0:0.#####} {0:0.#####} {0:0.#####}", a, a, a, a, a));

上一个示例的问题是:

f.Write("{0:0.#####} {0:0.#####} ...", a, b, ...);
冒号之前的格式字符串部分是格式参数数组的索引,因此如果使用全零,则只会得到第0个参数。改用

f.Write("{0:0.#####} {1:0.#####} ...", a, b, ...);
这里
{1:0.######}
将使用b,等等

除非您的代码对性能要求很高,否则在固定区域性中格式化字符串的首选方法是使用System.FormattableString.invariant方法在固定区域性中进行字符串插值:

using static System.FormattableString;


...
f.Write(Invariant($"{a:G5} {b:G5} {c:G5} {d:G5}"));
...

你需要创建一个新的区域性,你可以使用当前区域性作为模板,只更改分隔符,但我有太多的数字要写,所以?是什么让您怀疑您可能存在性能问题??对我来说,这听起来像是过早的优化。‘太多的数字’意味着我无法循环
f.Write(a.ToString(“G5”,CultureInfo.InvariantCulture))命令,因为它将生成多达8行代码,而不是一行
f.Write({0:0.}{0:0.}与我的所有参数一致。它与优化没有任何共同之处,但代码清晰。
f.Write("{0:0.#####} {1:0.#####} ...", a, b, ...);
using static System.FormattableString;


...
f.Write(Invariant($"{a:G5} {b:G5} {c:G5} {d:G5}"));
...