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}"));
...