提问人:Perotto 提问时间:10/29/2019 最后编辑:Michał TurczynPerotto 更新时间:10/29/2019 访问量:959
使用点分隔符将双精度写入文本文件
Write double to text file with dot separator
问:
我需要用点分隔符在文本文件中写几个双精度。我知道,这段代码就是解决方案:
StreamWriter f = new StreamWriter(file, Encoding.ASCII, 128, false);
double a = 1.057887;
f.Write(a.ToString("G5", CultureInfo.InvariantCulture));
但是我有太多的数字要写,所以我尝试了这个答案的方法:
f.Write("{0:0.#####} {0:0.#####} {0:0.#####} {0:0.#####} {0:0.#####}", a, a, a, a, a));
并试图在全球范围内改变文化:
System.Threading.Thread.CurrentCulture.NumberFormat.NumberDecimalSeparator = ".";
但是第一个“{0:0.#.####”导致逗号分隔符 (1,05789),第二个“线程”在 CS0120 中:非静态字段、方法或属性需要对象引用。
另一个问题是:
f.Write("{0:0.#####} {0:0.#####} ...", a, a, ...);
复制字符串后面的第一个对象,因此即使我写
f.Write("{0:0.#####} {0:0.#####} ...", a, b, ...);
答:
1赞
Michał Turczyn
10/29/2019
#1
您可以通过以下方式使用它:string.Format
string.Format(CultureInfo.InvariantCluture, "{0:0.###} {0:0.#####}", a)
1赞
Martin
10/29/2019
#2
为了实现这一点,您应该能够使用和指定适当的方法。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));
1赞
Jonas Høgh
10/29/2019
#3
上一个示例的问题:
f.Write("{0:0.#####} {0:0.#####} ...", a, b, ...);
冒号之前的格式字符串部分是格式参数数组的索引,因此,如果您使用所有零,则只会得到一个,即第 0 个参数。请改用
f.Write("{0:0.#####} {1:0.#####} ...", a, b, ...);
这里将使用 b 等。{1:0.#####}
除非您的代码对性能非常关键,否则在固定区域性中设置字符串格式的首选方法是使用 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));
f.Write("{0:0.#####} {0:0.#####} ...", a, a, ...);