2012-08-20 55 views
0

我想從VRML 2.0使用的格式輸出c#中的跛腳點數。什麼是IEEE 1xxx浮點格式的字符串表示形式,以及如何輸出它?

根據the vrml spec,這是在IEEE 1XXX浮點格式

雙精度浮點數(參見2. [IEEE])。

[IEEE]:ISO/IEC 9899:1990編程語言 - C. http://www.iso.ch/isob/switch-engine-cate.pl?searchtype=refnumber&KEYWORDS=9899 (死鏈接)

  • 究竟是什麼格式正確的字符串表示?我無法找到參考。我發現了關於二進制表示的一些解釋,但沒有一個關於字符串表示。
  • 如何根據這種格式配置NumberFormatInfo或CultureInfo?

澄清:

我想製作一個VRML文件,我需要知道如何保證

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

將導致一個數字,是按照100%到vrml特化。

+0

你的意思是,什麼是VRML正確的字符串represenation * * ?由於AFAIK IEEE標準定義了一個二進制表示,但是對於相同數字(例如'12.34','12,34','+ 12.34','1.234E + 1')可能有多個字符串表示。 – stakx 2012-08-20 09:21:29

+0

是的,我想生成一個VRML文件,我需要知道如何根據規格格式化我的數字。由於VRML是一種純文本格式,因此我需要將我的號碼轉換爲字符串 – HugoRune 2012-08-20 09:30:37

回答

2

我看到的地方,VRML用來浮點數爲ISO C.即使VRML規範頁面,你在那提提示相同的格式:

的SFFloat字段指定一個單精確的浮點數。 MFFloat指定零個或多個單精度浮點數。 SFFloats和MFFloats以IEEE 1xxx浮點格式寫入VRML文件(請參見2.[IEEE])。

記下該超鏈接指向:爲ISO C.

的文獻條目所以,你應該得到正確的格式,如果你簡單地禁用任何區域性特定的格式(如特殊小數點字符每個三位數字分隔的塊等)。你這樣做,通過使用「不變文化」:

double number = …; 
string numberEncoding = number.ToString(CultureInfo.InvariantCulture.NumberFormat); 

參見Standard Numeric Format Strings如果你想控制數量的輸出格式,例如:

  • 的科學格式:

    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); 
+0

我這樣做了,但我不清楚這是否會導致與VRML 100%兼容的數字表示。特別是我擔心用於非常小的數字的最大允許位數或指數格式化將會不同 – HugoRune 2012-08-20 09:32:33

+0

@HugoRune:如果您可以在VRML標準中驗證VRML確實使用相同格式來指定浮點數ISO C,那麼我相信.NET不變文化將會做你所需要的。 – stakx 2012-08-20 09:59:10

+0

好吧,但這正是我有麻煩驗證的部分:) – HugoRune 2012-08-20 10:08:56