如何使用前导零和没有分隔符格式化十进制?

时间:2014-09-26 23:59:14

标签: c# string-formatting

我要求将十进制值格式化为8个位置,其中最后两位数字保留为十进制值。

格式应为:00000000(其中最后2个零为十进制值)。

示例:

十进制值:193.45

  

结果应为:0000019345

十进制值:245

  

结果应为:0000024500

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

4 个答案:

答案 0 :(得分:3)

查看Custom Numeric Format Strings的MSDN文档。

可能可以定义自定义NumberFormatInfo以此格式打印字符串。但是,更容易实现此目的的方法之一是:

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

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

答案 1 :(得分:0)

试试这个:

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

答案 2 :(得分:0)

我可能会做string操纵。我确定格式指示符,但这似乎更容易。

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

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

答案 3 :(得分: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");
    }
}

有一点需要注意的是,如果你有任何没有两个小数点的数据,这种方法就会失败。