2014-11-20 35 views
1

我想獲得與組分隔符的Double值的字符串輸出,並沒有任何文化中的精度損失。無論如何沒有寫我自己的方法來做到這一點呢?雙ToString格式沒有精度丟失和組分隔符

我知道你可以使用ToString(「N0」),但這會導致精度損失。 我知道你可以使用ToString(「R」)來保持精度,但是這不包括組分隔符。

E.g. 對於Double.MaxValue在固定區域性我想

"179,769,313,486,231,570,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000" 

編輯:當我說在精度損失我的意思是整體數字顯著的數字,而不是沒有價值的「decmial」部分失去精度。我希望能夠使用組分隔符進行「往返」,所以ToString - > Parse - > ToString。

編輯2:爲了更好地比較我在這裏試圖解決的問題,使用了ToString(「N0」)時的輸出。在這裏你可以看到的顯著數字結尾的四捨五入:

"179,769,313,486,232,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000" 
+2

沒有什麼像*精確*雙。 – CriketerOnSO 2014-11-20 16:47:10

+1

http://stackoverflow.com/questions/2863388/what-is-the-equivalent-of-the-java-bigdecimal-class-in-c – 2014-11-20 16:51:52

+1

['decimal'](http://msdn.microsoft.com /en-us/library/364x0z75.aspx) – 2014-11-20 16:52:23

回答

1

看起來不像任何內置的ToString格式做我所需要的。

爲了我的目的,我能夠編寫一個方法來處理我的場景,但由於它不適用於所有可能的值,所以我不會在這裏發佈它。

感謝所有海報的幫助。

0

如果指定格式#,0.#您將獲得:

  • 千位分隔符
  • 作爲多的小數位需要

這應該滿足您的要求,如果我正確地閱讀問題。

+0

恐怕這不起作用,因爲你鬆了有效數字。在下面的例子中,你會注意到在'232,000'部分取整,而不是我原來的問題'231,570': Double.MaxValue.ToString(「#,0.#」)=「179,769,313,486,232,000,000 ...」 – MarkOwen320 2014-11-20 20:28:09