2015-08-25 110 views
0

我在我的程序中有一個小數,它可能在小數點後有零,我想擺脫它們。從C中的小數中刪除任何尾隨零#

我希望通過將十進制轉換爲字符串並僅使用基於發現小數點的位置的子字符串以及小數點後的內容是否爲零來實現此目的。這是我想出的:

string number = Convert.ToString(MyDouble); 
if (number.Contains("."))//If there are trailing zeros 
{ 
    //If the numbers after the decimal point (when taken as an integer) equal 0 
    if(Convert.ToInt16(number.Substring(number.IndexOf("."))) == 0) 
    { 
     //Remove anything after the decimal point 
     number = number.Substring(0, number.Length - number.IndexOf(".")); 
    } 
} 
result = Convert.ToDecimal(number); 

但這不起作用。它出什麼問題了?

+0

您可以簡單地使用自定義格式說明符(特別是看看'#'和'0')https://msdn.microsoft.com/en-us/library/0c899ak8(v=vs.110).aspx – hatchet

+1

我真的不明白這是什麼正試圖完成。通常,人們可以將數值存儲在內存中,就像它們的數字(不是字符串)表示一樣。然後,在某種類型的用戶界面中顯示它們時,只需應用一個字符串格式器即可。爲什麼這次談話? – David

+0

你可以從樣本中刪除所有不相關的代碼,並用常量代替值:'number'是主要候選人? –

回答

0

我已找到解決方案。如果十進制數(當轉換爲字符串時)有一個小數點,while循環會一直刪除最後一個字符,最後一個字符爲0.

string number = Convert.ToString(MyDouble); 
if (number.Contains(".")) 
{ 
    while(number.Substring(number.Length - 1) == "0") 
    { 
     number = number.Substring(0, number.Length - 1); 
    } 
} 
result = Convert.ToDecimal(number); 
+0

對於什麼問題提出了一個非常糟糕的主意(它是否適用於您) - '%1'在提取小數點後的部分會更好。此外,代碼似乎與後者完全不同的東西 - 信號代碼試圖刪除零,如果只有零,這一個 - 刪除零到第一個非零數字。您可能需要編輯問題以對齊兩者。 –

+0

@AlexeiLevenkov你是對的。但是我錯誤地說了我的問題。我想'2.0200'變成'2.02'以及'3.00'變成'3'。 –

1

ToString()可以做到這一點。這裏是如何做到這一點 -

 decimal a = 122.00000m; 
    string trimmed = a.ToString("#.00"); 

,如果你想擺脫所有的零的只是不喜歡它這 -

decimal a = 122.00000m; 
    string trimmed = a.ToString("#"); 

所以,你可以在你的應用程序了作爲定義了很多格式代碼常量,並根據需要使用它們...無需邏輯。

+0

並且_a = 122.01300_? – Steve

+0

它會圍繞它 – Kapoor

+0

所以我通常會在計算中做所有的四捨五入操作並在顯示值之前使用ToString格式化。 – Kapoor

0

LINQ使這很容易(如果你不想轉換值):

using System; 
using System.Linq; 

public class Program 
{ 
    public static void Main() 
    { 
    var a = "10.001000"; 
    var b = a.Reverse().SkipWhile(i => i == '0').Reverse(); 
    var c = new String(b.ToArray()); 

    Console.WriteLine(a); 
    Console.WriteLine(c); 
    } 
} 

結果:

10.001000

10.001