我需要使用string.Format格式化变量小数位。
我的输入可以如下:5.0000000
,我知道我需要使用的小数位数,即3
,所以显然所需的输出应该是5.000
。
由于某些非常特殊的环境string.Format是我可以使用的唯一方法。我创建了一个基于小数位数的函数可以返回格式化字符串的一部分,即3
的{{1}}。
我的想法是嵌套格式化字符串中格式化字符串的一部分。意味着做类似的事情:
000
,其中{0:0.{1}}
为{1}
。
然而,这会带来FormatException。这有可能实现吗?
感谢您的帮助!
答案 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);