gpt4 book ai didi

c# - 如何在 C# 中更改 NaN 字符串表示形式?

转载 作者:太空狗 更新时间:2023-10-29 18:22:35 24 4
gpt4 key购买 nike

我的程序将点云保存到文件中,其中每个点云都是来自 System.Windows.Media.Media3D 命名空间的 Point3D[,]。这显示了一行输出文件(葡萄牙语):

-112,644088741971;71,796623005014;NaN (Não é um número)

虽然我希望它是(以便之后正确解析):

-112,644088741971;71,796623005014;NaN

生成文件的代码块在这里:

var lines = new List<string>();

for (int rows = 0; rows < malha.GetLength(0); rows++) {
for (int cols = 0; cols < malha.GetLength(1); cols++) {

double x = coordenadas_x[cols];
double y = coordenadas_y[rows];
double z;

if ( SomeTest() ) {
z = alglib.rbfcalc2(model, x, y);
} else {
z = double.NaN;
}

var p = new Point3D(x, y, z);
lines.Add(p.ToString());

malha[rows, cols] = p;
}
}

File.WriteAllLines("../../../../dummydata/malha.txt", lines);

似乎从 Point3D.ToString() 内部调用的 double.NaN.ToString() 方法包含我不知道的带括号的“附加解释”根本不想。

有没有办法改变/覆盖这个方法,让它只输出 NaN,没有括号部分?

最佳答案

Double.ToString() 使用 NumberFormatInfo.CurrentInfo 来格式化它的数字。最后一个属性引用当前在事件线程上设置的 CultureInfo。这默认为用户的当前语言环境。在这种情况下,它是葡萄牙文化背景。要避免此行为,请使用 Double.ToString(IFormatProvider) 重载。在这种情况下,您可以使用 CultureInfo.InvariantCulture

此外,如果您想保留所有其他标记,只需切换 NaN 符号即可。默认情况下,全局化信息是只读的。创建一个克隆将解决这个问题。

System.Globalization.NumberFormatInfo numberFormatInfo = 
(System.Globalization.NumberFormatInfo) System.Globalization.NumberFormatInfo.CurrentInfo.Clone();
numberFormatInfo.NaNSymbol = "NaN";

double num = double.NaN;
string numString = System.Number.FormatDouble(num, null, numberFormatInfo);

要在当前线程上设置它,请创建当前文化的副本并在文化上设置数字格式信息。 Pre .NET 4.5没有办法为所有线程设置它。创建每个线程后,您必须确保正确的 CultureInfo。从 .NET 4.5 开始,CultureInfo.DefaultThreadCurrentCulture 定义了 AppDomain 中线程的默认区域性。仅当线程的文化尚未设置时才考虑此设置(参见 MSDN)。

单线程示例:

System.Globalization.CultureInfo myCulture =
(System.Globalization.CultureInfo)System.Threading.Thread.CurrentThread.CurrentCulture.Clone();
myCulture.NumberFormat.NaNSymbol = "NaN";

System.Threading.Thread.CurrentThread.CurrentCulture = myCulture;
string numString = double.NaN.ToString();

关于c# - 如何在 C# 中更改 NaN 字符串表示形式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15301101/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com