如何在C#中将十进制格式化为以编程方式控制的小数位数?

时间:2009-04-14 20:26:57

标签: c# string formatting

如何将数字格式化为固定数量的小数位(保留尾随零),其中位数由变量指定?

e.g。

int x = 3;
Console.WriteLine(Math.Round(1.2345M, x)); // 1.234 (good)
Console.WriteLine(Math.Round(1M, x));      // 1   (would like 1.000)
Console.WriteLine(Math.Round(1.2M, x));    // 1.2 (would like 1.200)

请注意,因为我想以编程方式控制位数,所以这个string.Format将不起作用(当然我不应该生成格式字符串):

Console.WriteLine(
    string.Format("{0:0.000}", 1.2M));    // 1.200 (good)

我应该只包含Microsoft.VisualBasic并使用FormatNumber吗?

我希望在这里遗漏一些明显的东西。

5 个答案:

答案 0 :(得分:12)

尝试

decimal x = 32.0040M;
string value = x.ToString("N" + 3 /* decimal places */); // 32.004
string value = x.ToString("N" + 2 /* decimal places */); // 32.00
// etc.

希望这适合你。见

http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx

了解更多信息。如果你发现附加有点hacky尝试:

public static string ToRoundedString(this decimal d, int decimalPlaces) {
    return d.ToString("N" + decimalPlaces);
}

然后你可以打电话

decimal x = 32.0123M;
string value = x.ToRoundedString(3);  // 32.012;

答案 1 :(得分:4)

尝试此操作以动态创建自己的格式字符串,而无需使用多个步骤。

Console.WriteLine(string.Format(string.Format("{{0:0.{0}}}", new string('0', iPlaces)), dValue))

步骤

//Set the value to be shown
decimal dValue = 1.7733222345678M;

//Create number of decimal places
int iPlaces = 6;

//Create a custom format using the correct number of decimal places
string sFormat = string.Format("{{0:0.{0}}}", new string('0', iPlaces));

//Set the resultant string
string sResult = string.Format(sFormat, dValue);

答案 2 :(得分:2)

请参阅以下链接以获取格式字符串帮助:
http://msdn.microsoft.com/en-us/library/0c899ak8.aspx
http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx

你想要这个:

Console.WriteLine(Math.Round(1.2345M, x).ToString("F" + x.ToString()));

此外,如果需要,.ToString调用将为您舍入,因此您可以跳过Math.Round调用并执行此操作:

Console.WriteLine(1.2345M.ToString("F" + x.ToString()));

答案 3 :(得分:1)

这样的事情应该处理它:

int x = 3;
string format = "0:0.";
foreach (var i=0; i<x; i++)
    format += "0";
Console.WriteLine(string.Format("{" + format + "}", 1.2M));

答案 4 :(得分:0)

执行此操作的方法:

private static string FormatDecimal(int places, decimal target)
        {
            string format = "{0:0." + string.Empty.PadLeft(places, '0') + "}";
            return string.Format(format, target); 
        }