我要依靠的說,沒有問題是一個愚蠢的問題,但我有一個稍微愚蠢的問。更簡單的方法來防止數字顯示在指數記號
編輯:
看來,這個問題已經被問及這裏已經回答了幾次,但使用的標題爲重複搜索時,我沒遇到過。下面是一些相關的帖子:
- Double to string conversion without scientific notation
- How to convert double to string without the power to 10 representation (E-05)
- 將有一個答案(喬恩斯基特):http://www.yoda.arachsys.com/csharp/DoubleConverter.cs
原題:
我我有一些應用程序次存儲一些體面的小數字,如0.000023425
。這些數字被加載到用戶編輯的TextBox
控件中。下面的人爲的例子說明我的問題:
Dim number As Double = 0.000023425
someTextBox.Text = number.ToString() ' Shows "2.3425E-05"
如前所述,顯示文字2.3425E-05
,這是不完全直觀的用戶看到,再加上我有一個數字更精確(出19位小數)。我希望輸出是固定點。當然,我可以輕鬆乾淨地做:
number.ToString("F20") ' Shows "0.00002342500000000000"
但是,然後有一個令人討厭的零數剩餘。因此,要解決這個問題,我可以這樣做:
number.ToString("#,##0.####################") ' Shows "0.000023425"
這就是我想要的,但有沒有更好的辦法做到這一點,而不是有一個巨大的醜陋的格式字符串呢?所以,好吧,這不是那麼難看,但肯定有一種不同的方式,對吧?我的目標是以友好的方式顯示存儲在數據庫中的原始值,並且我寧願不必強制根據數字格式。
謝謝!
UPDATE
也許我說在後有點過分。經過一番實驗後,我發現將基礎數據類型更改爲Decimal
可解決此問題。
Dim number As Decimal = 0.000023425
someTextBox.Text = number.ToString() ' Shows "0.000023425" instead of "2.3425E-05"
所以聽起來好像Double
s不夠精確,無法正常顯示?
EDIT
我found a post(雖無upvotes)做在其上的.ToString()
,其具有預期的效果之前,簡單地鑄雙值作爲十進制。我有什麼理由不想這樣做?或許對Decimal
的演員陣容可能會以與Double
不同的值結束(儘管數量可以忽略不計),所以#,##0.#################...
格式字符串可能更安全。
看看這個 - http://stackoverflow.com/questions/1546113/double-to-string-conversion-without-scientific-notation。 Jon Skeet的實用類看起來很有前景。 – RichardOD 2009-10-21 19:49:47
哦,順便說一句,這絕對不是一個愚蠢的問題! – RichardOD 2009-10-21 19:51:46
@RichardOD:喬恩的實用課程正是我想要的解決方案,雖然看起來有點矯枉過正。我真的不需要19位數以上的精度,而數據庫也不會在精度上超過精度的兩倍(也不需要)。如果你把你的評論變成答案,我會很樂意接受它作爲答案。 – 2009-10-21 21:21:19