我有一個要求將十進制值格式化爲8位,最後2位保留爲十進制值。如何格式小數點前導零和沒有分隔符?
格式應該是:00000000(最後2個零是十進制值)。
實施例:
十進制值:193.45
結果應該是:0000019345
十進制值:245
結果應該是:0000024500
我知道我可以使用string.format("{format here}", value)
或.ToString("format here")
但不知道使用什麼字符串格式。
我有一個要求將十進制值格式化爲8位,最後2位保留爲十進制值。如何格式小數點前導零和沒有分隔符?
格式應該是:00000000(最後2個零是十進制值)。
實施例:
十進制值:193.45
結果應該是:0000019345
十進制值:245
結果應該是:0000024500
我知道我可以使用string.format("{format here}", value)
或.ToString("format here")
但不知道使用什麼字符串格式。
看一看MSDN文檔Custom Numeric Format Strings。
可能會定義一個自定義NumberFormatInfo以此格式打印字符串。然而,更容易做到這一點的方法是以下任一選項:
(value * 100).ToString("00000000");
string.Format("{0:00000000}", value * 100);
試試這個:
decimalValue.ToString("00000000.00").Replace(".", "");
這工作,但沒有直接的字符串格式來做到這一點?這是因爲我要將格式字符串存儲在數據庫中,所以我可以隨時更改它而不更改我的代碼。 – VAAA 2014-09-27 00:03:04
@VAAA有一個[縮放說明符](http://msdn.microsoft.com/en-us/library/0c899ak8(v = vs.110).aspx#SpecifierTh),但它分開,不是相乘,而是數千,而不是數百。 – GSerg 2014-09-27 00:07:34
這會在某些語言環境中中斷(例如,如果','用作小數點分隔符)。 – user2864740 2014-09-27 00:23:26
我可能只是做string
操作。我確定是的格式指示符,但這似乎更容易。
string ret = (decimalValue * 100).ToString();
return ret.PadLeft(8, '0');
這不會編譯。 – user2864740 2014-09-27 00:24:21
只是爲了好玩,與小數型我發現,通過訪問其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");
}
}
一個需要注意的是,如果你有沒有兩位小數點的數據,這種方法會失敗。
我喜歡這個到我的回答 – allonym 2014-09-27 00:03:13