2013-07-07 118 views
9

我剛剛得知小數點不知何故記得需要多少trailing零來存儲數字。換句話說:它記住了分數的大小。如何格式化沒有尾隨零的十進制

例如:

123M.ToString() ==> resuls in: 123 
123.00M.ToString() ==> resuls in: 123.00 
123.450M.ToString() ==> resuls in: 123.450 

我要尋找一個格式化字符串或另一招甩掉那些「不必要的」尾隨零的,但保持顯著數字。所以:

123M.ToString() ==> resuls in: 123 
123.00M.ToString() ==> resuls in: 123 
123.450M.ToString() ==> resuls in: 123.45 

刪除在新的字符串末尾的零點是不是對我來說是真正的選擇,因爲那時我必須找出如果字符串包含一小部分,如果是的話,還必須刪除可選''或「」視文化等

+0

我認爲關於這一主題的最好的答案是[這一個](http://stackoverflow.com/a/7983330/187697) – keyboardP

+0

[刪除尾隨零](http://stackoverflow.com/questions/4525854/remove-trailing-zeros)的可能的重複,它是較舊的,有更好的答案和評論。 – Sam

回答

8

有幾種方法可以做到這一點,但因爲你是無論如何轉換爲String對象,我想你可以嘗試這樣的事:

myDecimalVariable.toString("G29");

,或者使用上面的代碼,假設123.00M是你十進制:

123.00M.toString("G29");

這裏是一個簡潔的例子是如何工作的解釋:

具有數字的G格式表示格式化許多重要的 數字。因爲29是Decimal可以使用的最重要的數字,所以這將有效地截斷尾隨零,而不會對四捨五入進行舍入。

+5

請參閱[此評論](http://stackoverflow.com/questions/4525854/remove-trailing-zeros/4525896#comment8733932_4525983)關於某些情況下,G29可能無法按預期工作。 – keyboardP

+0

沒錯,但他的例子並沒有包含任何這些情況,所以我認爲這將是獲得他想要的最簡單的方法。但這是很好的知道。 –

+1

你的回答沒有錯,但我認爲這可能值得一提,以防其他人遇到此線程。 – keyboardP

-1

只是套用格式說明爲零,將刪除尾隨零:

string test = (1.23M * 100M).ToString("0"); 
//prints 123. 
string test2 = 123.450M.ToString(".00"); 
//prints 123.45. 
string test3 = 123.450M.ToString().Trim('0'); 
+0

不錯的嘗試......但我事先不知道小數內的值是什麼...... –

+0

請注意,'Trim('0')'將導致'0.5m'被格式化爲'.5'而不是' 0.5'。 – Sam

+0

'Trim('0')'也將'123.00m'格式化爲'123.' – Sam