C#String.Format - 嵌套格式化字符串

时间:2018-02-08 07:44:05

标签: c# string nested decimal

我需要使用string.Format格式化变量小数位。

我的输入可以如下:5.0000000,我知道我需要使用的小数位数,即3,所以显然所需的输出应该是5.000

由于某些非常特殊的环境string.Format是我可以使用的唯一方法。我创建了一个基于小数位数的函数可以返回格式化字符串的一部分,即3的{​​{1}}。

我的想法是嵌套格式化字符串中格式化字符串的一部分。意味着做类似的事情:

000,其中{0:0.{1}}{1}

然而,这会带来FormatException。这有可能实现吗?

感谢您的帮助!

5 个答案:

答案 0 :(得分:3)

我认为你们都可以一步到位:

decimal d = 5;
int n = 3;
string str = string.Format("{0:0."+ new string('0', n) +"}", d);

答案 1 :(得分:1)

这不是很好的方式,但你可以结合两种不同的格式化方法:

string.Format($"{{0:N{number_of_decimals}}}", value);

奇怪但有效

答案 2 :(得分:0)

定义以下方法:

public static String GetFormat(Int32 decimals)
{
    // let's clamp the input to prevent abuses
    if (decimals < 0)
        decimals = 0;
    else if (decimals > 10)
        decimals = 10;

    if (decimals == 0)
        return "{0:0}";

    return String.Concat("{0:0.", (new String('0', decimals))), "}";
}

然后:

Double value = 45.355d;
Int32 decimals = 3;

String text = String.Format(GetFormat(decimals), value);

答案 3 :(得分:0)

如果您的输入是一个字符串,将其解析为float,将其转换为int并将您的函数应用于String.Format参数:

  float x;
  float.TryParse(input, out x);

如果您的输入已经是浮点数,则无需执行此操作。然后,

String.Format("{0}.{1}", (int)x, yourFunction(x, number_of_decimals);

答案 4 :(得分:0)

您也可以使用扩展方法:

public static class ExtendedMethod
{
    public static string DecimalFormat(this decimal input,int decimals)
    {
      return string.Format({"0." + new string('0', decimals)+"}", input);
      //or return input.ToString("0." + new string('0', decimals));
    }
}

然后:

 string result = yourDecimal.DecimalFormat(3);