2012-08-22 80 views
4

我有一個雙倍的文本表示,並且想知道是否可以將它往返翻回。如果我也想接受任何種類的數字式輸入,我怎麼知道這一點?或者,我怎麼知道在使用Double.Parse解析雙字符串時是否會丟失任何精度?或者,我如何ToString一個雙重匹配與另一個雙字符串相同的格式?任何這些問題的答案都是我想的解決方案。如何知道雙弦是否安全?

+0

你有什麼已經嘗試過?一些測試可能? –

+0

你是什麼意思「匹配相同的格式作爲另一個雙串」?你有這種格式指定,還是不? I.E.我現在在此向您提供這個字符串:「123sd344 + 334.ere」,我聲稱這是一個格式良好的雙數字。你怎麼猜這是什麼格式? – quetzalcoatl

+0

嗯。我正在考慮限制有效數字和指數的數量,所以我可以保證,任何以#####格式編寫的數字都是安全的。 –

回答

4

使用R格式說明轉換的doublestring

myDouble.ToString("R") 

The Round-trip ("R") Format Specifier MSDN上。

往返(「R」)格式說明符保證轉換爲字符串的數值將被解析回相同的數值。該格式僅支持Single,Double和BigInteger類型。

(重點煤礦)

+0

這適用於double - > string - > double,但對string - > double - > string沒有幫助。 – JohnB

+0

@JohnB - 它完全依賴於'double'的原始表示形式。人們必須假設始終如一的表示。 – Oded

+2

「R」轉換器不可靠。有關更多信息,請參閱http://stackoverflow.com/questions/24299692/why-is-a-round-trip-conversion-via-a-string-not-safe-for-a-double?rq=1。 – supercat

-1

當然,這不是幾個原因往返安全:

  1. 解析字符串時,雙,因爲雙不包含有關其視覺表現的任何信息的數字格式丟失。

  2. 雖然字符串表示法通常是十進制的,但double是二進制浮點數。所以0.1的雙精度不會精確到0.1,因爲0.1的二進制表示沒有有限的數字。您可以解析爲十進制而不是雙精度,以避免此問題。

我會建議建立一個存儲數字和字符串表示的結構。

相關問題