2014-09-26 85 views
4

我有一個要求將十進制值格式化爲8位,最後2位保留爲十進制值。如何格式小數點前導零和沒有分隔符?

格式應該是:00000000(最後2個零是十進制值)。

實施例:

十進制值:193.45

結果應該是:0000019345

十進制值:245

結果應該是:0000024500

我知道我可以使用string.format("{format here}", value).ToString("format here")但不知道使用什麼字符串格式。

回答

3

看一看MSDN文檔Custom Numeric Format Strings

可能會定義一個自定義NumberFormatInfo以此格式打印字符串。然而,更容易做到這一點的方法是以下任一選項:

(value * 100).ToString("00000000"); 

string.Format("{0:00000000}", value * 100); 
+0

我喜歡這個到我的回答 – allonym 2014-09-27 00:03:13

0

試試這個:

decimalValue.ToString("00000000.00").Replace(".", ""); 
+0

這工作,但沒有直接的字符串格式來做到這一點?這是因爲我要將格式字符串存儲在數據庫中,所以我可以隨時更改它而不更改我的代碼。 – VAAA 2014-09-27 00:03:04

+0

@VAAA有一個[縮放說明符](http://msdn.microsoft.com/en-us/library/0c899ak8(v = vs.110).aspx#SpecifierTh),但它分開,不是相乘,而是數千,而不是數百。 – GSerg 2014-09-27 00:07:34

+5

這會在某些語言環境中中斷(例如,如果','用作小數點分隔符)。 – user2864740 2014-09-27 00:23:26

0

我可能只是做string操作。我確定的格式指示符,但這似乎更容易。

string ret = (decimalValue * 100).ToString(); 

return ret.PadLeft(8, '0'); 
+0

這不會編譯。 – user2864740 2014-09-27 00:24:21

0

只是爲了好玩,與小數型我發現,通過訪問其binary representation我能夠改變比例然後格式化您的要求打:

public class Program 
{ 
    static void Main() 
    { 
     decimal[] ds = { 193.45m, 245.00m }; 
     foreach (decimal d in ds) 
     { 
      Console.WriteLine(Format8(d)); 
     } 
    } 

    static string Format8(decimal d) 
    { 
     int[] parts = decimal.GetBits(d); 
     bool sign = (parts[3] & 0x80000000) != 0; 

     byte scale = (byte)((parts[3] >> 16) & 0x7F); 
     Debug.Assert(scale == 2); 
     scale = 0; // alter scale to remove the point 

     return new decimal(parts[0], parts[1], parts[2], sign, scale) 
      .ToString("00000000"); 
    } 
} 

一個需要注意的是,如果你有沒有兩位小數點的數據,這種方法會失敗。

相關問題