如何设置带前导零且不带分隔符的十进制格式

本文关键字:分隔符 格式 十进制 何设置 设置 | 更新日期: 2023-09-27 18:24:55

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

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

示例:

十进制值:193.45

结果应该是:0000019345

十进制值:245

结果应该是:0000024500

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

如何设置带前导零且不带分隔符的十进制格式

查看MSDN文档中的自定义数字格式字符串。

可以定义自定义NumberFormatInfo来打印此格式的字符串。然而,实现这一点的一种更容易的方法是以下任一选项:

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

只是为了好玩,玩十进制类型时,我发现通过访问其二进制表示,我可以更改小数位数,然后根据您的要求对其进行格式化:

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");
    }
}

一个警告是,如果您有任何没有两个小数点的数据,这种方法将失败。

试试这个:

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

我可能只会做string操作。我确信有一个格式指示符,但这似乎更容易。

string ret = (decimalValue * 100).ToString();
return ret.PadLeft(8, '0');