Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# IEEE 1xxx浮点格式的字符串表示形式是什么,如何输出?_C#_Floating Point_Cultureinfo_Vrml_Iformatprovider - Fatal编程技术网

C# IEEE 1xxx浮点格式的字符串表示形式是什么,如何输出?

C# IEEE 1xxx浮点格式的字符串表示形式是什么,如何输出?,c#,floating-point,cultureinfo,vrml,iformatprovider,C#,Floating Point,Cultureinfo,Vrml,Iformatprovider,我试图以VRML2.0使用的格式从c#输出藐视点数 据报道,这是 IEEE 1xxx浮点中的双精度浮点数 格式(见2.[IEEE]) [IEEE]:ISO/IEC 9899:1990编程语言——C。 (死链接) 此格式的正确字符串表示形式是什么?我找不到推荐人。我找到了一些关于二进制表示的解释,但没有找到关于字符串表示的解释 如何根据此格式配置NumberFormatInfo或CultureInfo 澄清: 我想产生一个vrml文件,我需要知道如何确保 var myCultureInfo

我试图以VRML2.0使用的格式从c#输出藐视点数

据报道,这是

IEEE 1xxx浮点中的双精度浮点数 格式(见2.[IEEE])

[IEEE]:ISO/IEC 9899:1990编程语言——C。 (死链接)

  • 此格式的正确字符串表示形式是什么?我找不到推荐人。我找到了一些关于二进制表示的解释,但没有找到关于字符串表示的解释
  • 如何根据此格式配置NumberFormatInfo或CultureInfo

澄清:

我想产生一个vrml文件,我需要知道如何确保

var myCultureInfo = CultureInfo.InvariantCulture;
myCultureInfo.NumberFormat = ....
StringWriter sw = new StringWriter(MyCultureInfo)
sw.Write(myDouble);

将产生一个100%符合vrml规范的数字。

我在某处看到vrml使用与ISO C相同的浮点数格式。即使您提到的vrml规范页面也提示:

SFFloat字段指定一个单精度浮点数。MFFloat指定零个或多个单精度浮点数。SFfloat和MFfloat以IEEE 1xx浮点格式写入VRML文件(请参阅)

请注意超链接指向的位置:指向ISO C的参考书目条目

因此,如果您只是简单地禁用任何特定于区域性的格式(例如特殊的小数点、将每个块分隔为三位数字的字符等),那么您应该获得正确的格式。您可以通过使用“不变区域性”来实现这一点:

如果要控制数字的输出格式,请参见

  • 对于科学格式:

    number.ToString("E", CultureInfo.InvariantCulture.NumberFormat)
    
  • 对于往返格式:

    number.ToString("R", CultureInfo.InvariantCulture.NumberFormat)
    
……等等

p.S.:如果您不太相信固定区域性会完全匹配,则始终可以创建自己的
NumberFormatInfo
实例:

var vrmlNumberFormat = new NumberFormatInfo { NumberDecimalSeparator = ".", … };
string numberEncoding = number.ToString(vrmlNumberFormat);

你的意思是,VRML中正确的字符串表示法是什么?因为IEEE标准定义了二进制表示,但同一个数字可能有多个字符串表示(例如,
12.34
12,34
+12.34
1.234E+1
)。是的,我想生成一个VRML文件,我需要知道如何根据规范格式化我的数字。由于VRML是纯文本格式,我需要将我的数字转换为字符串。我这样做了,但我一点也不清楚这是否会导致数字表示与VRML 100%兼容。我特别担心的是,允许的最大位数或用于非常小的数字的指数格式将是different@HugoRune:如果您可以在VRML标准中验证VRML确实使用与ISO C相同的格式指定浮点数,那么我相信.NET不变文化会满足您的需要。是的,但这正是我难以验证的部分:)@HugoRune:更新了我答案的开头。
var vrmlNumberFormat = new NumberFormatInfo { NumberDecimalSeparator = ".", … };
string numberEncoding = number.ToString(vrmlNumberFormat);