我希望我已經研究了這一點,我的前提並不完全脫離基礎。如果是這樣,那麼在那裏的數學家可以讓我直觀。爲什麼使用「G」標準格式字符串格式化Double不會返回完整的字符串?
我的前提是,Double
值,如12.5
應四捨五入至5個顯著數字(非小數)爲12.500
。相反,使用下面的C#代碼,我得到12.5
:
Double d = 12.5;
Console.WriteLine(d.ToString("G5"));
我從2007年這似乎呼應了我的問題碰到this post。事實上,我正在使用這些示例數字來保持事物的一致性。
我的目標在這裏是爲了更好地瞭解以下內容:
是我的簽名圖的理解數學上正確?也就是說,我的期望是否合理,或者輸出「12.5」是否正確?
這真的是(非常長壽命)在框架中的錯誤?如果是這樣,是否可以修復?
假設這是一個錯誤,我現在可以做些什麼?寫一個黑客來確定有多少 sig fig你實際上回來然後填充它?滾我自己的代碼到 做什麼「G」格式的字符串是應該做?我已經在SO上遇到過這方面的例子,所以也許這就是沒有乾淨選擇的證據。
此外,我也知道有Double
存儲問題可能這個問題的四捨五入方面產生負面影響,但現在,我只關心更多的SIG的無花果比原來的數字問題。
編輯:我已經測試了這個框架4.5。
僅12.5的值* *有3位有效數字。精度指定輸出中的*最大*位數,而不是確切的位數。我注意到,我在迴應你所提到的線索,有很多與此處相同的想法...... – 2014-12-01 19:37:20
@JonSkeet它的確說得最多。剛開始時,這讓我感到很難過。儘管如此,我仍然擔心本Voigt的回答,認爲12.500數學上更準確,因爲它表明讀者更精確。這不正確嗎?這是我正在嘗試傳達的準確性建議。 – DonBoitnott 2014-12-01 19:42:46
當我看到你的觀點時,我認爲裏克引用的文檔是最引人注目的,說實話。如果您對特定數量的有效數字(包括尾隨零)感興趣,那麼您可能需要查看「decimal」。 – 2014-12-01 19:50:51