2010-01-23 50 views
4

下面的代碼目前輸出:如何去掉十進制字符串中的零和小數點?

12.1 
12.100 
12.1000 
12.00 
12 
12.0000 

我怎樣才能改變它,所以它輸出:

12.1 
12.1 
12.1 
12 
12 
12 

Math.Round似乎是一回事,但它讓我確定有多少位小數我想要,但我希望他們像上面那樣變化。

如果沒有數學方法去做,我會從字符串的右邊去掉零和小數點,但會認爲有一種數學方法來處理這個問題。

using System; 
using System.Collections.Generic; 

namespace Test8834234 
{ 
    public class Program 
    { 
     static void Main(string[] args) 
     { 

      List<string> decimalsAsStrings = new List<string> 
      { 
       "12.1", 
       "12.100", 
       "12.1000", 
       "12.00", 
       "12", 
       "12.0000" 
      }; 

      foreach (var decimalAsString in decimalsAsStrings) 
      { 
       decimal dec = decimal.Parse(decimalAsString); 
       Console.WriteLine(dec); 
      } 

      Console.ReadLine(); 

     } 
    } 
} 

回答

10

您還可以使用十進制的ToString使用參數:

string s = dec.ToString("0.#"); 

注意:您可以有您的代碼存在國際化問題。您編碼它的方式,它將使用來自用戶計算機的文化信息,該文件信息可能包含.以外的小數分隔符。這可能會導致您的程序爲具有.千位分隔符的用戶提供不正確的結果。

如果要保證解析方法始終表現相同,則可以使用CultureInfo.InvariantCulture。如果你真的想根據用戶的文化設置解析字符串,你在做什麼是好的。

4

用途:

Console.WriteLine("{0:0.####}", dec); 

瞭解更多關於數字格式字符串從here...

1

此字符串格式應該讓你的一天:「0。#############################」。請記住,小數儘管可以有至多29個有效數字。

實例:

? (1000000.00000000000050000000000m).ToString("0.#############################") 
-> 1000000.0000000000005 

? (1000000.00000000000050000000001m).ToString("0.#############################") 
-> 1000000.0000000000005 

? (1000000.0000000000005000000001m).ToString("0.#############################") 
-> 1000000.0000000000005000000001 

? (9223372036854775807.0000000001m).ToString("0.#############################") 
-> 9223372036854775807 

? (9223372036854775807.000000001m).ToString("0.#############################") 
-> 9223372036854775807.000000001 
0
public static string RemoveDecimalsFromString(string input) 
{ 
    decimal IndexOfDot = input.IndexOf("."); 
    StringBuilder sb = new StringBuilder(); 
    for (int i = 0; i < IndexOfDot; i++) 
    { 
     sb.Append(input[i]); 
    } 

    return sb.ToString(); 
} 
相關問題