我有一个要求将十进制值格式化为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