C# 数学。小数点后x位的下限

C# 数学。小数点后x位的下限,c#,math,C#,Math,我需要在小数点后显示两位数字,而四舍五入为一个百分比。我写了这段代码就是为了这么做,但这看起来太复杂了,还有其他更有效的方法吗 double decimalPlacesFactor =Math.Pow(10, numberOfDigits+2); percentage = Math.Floor((NumA/NumB)*decimalPlacesFactor)/decimalPlacesFactor *100; 输出应该如下所示 99.78 % 取决于您希望如何显示百分比值,但我猜您希望显

我需要在小数点后显示两位数字,而四舍五入为一个百分比。我写了这段代码就是为了这么做,但这看起来太复杂了,还有其他更有效的方法吗

 double decimalPlacesFactor =Math.Pow(10, numberOfDigits+2);
 percentage = Math.Floor((NumA/NumB)*decimalPlacesFactor)/decimalPlacesFactor *100;
输出应该如下所示

99.78 %

取决于您希望如何显示百分比值,但我猜您希望显示百分比的
string
?那么:

string percentage = Math.Floor(NumA/NumB).ToString("0.00");
Console.WriteLine(Math.Floor(2.3).ToString("0.00")); //this will output 2.00
如果要配置十进制数后的位数,可以事先创建屏蔽字符串,如下所示:

private string CreateMaskingString(int numberOfDigits)
{
    var sb = new StringBuilder("0.");
    sb.Append(new string('0', numberOfDigits));
    return sb.ToString();
}
Console.WriteLine(Math.Floor(2.3).ToString(CreateMaskingString(2))); //this will output 2.00
用法如下所示:

private string CreateMaskingString(int numberOfDigits)
{
    var sb = new StringBuilder("0.");
    sb.Append(new string('0', numberOfDigits));
    return sb.ToString();
}
Console.WriteLine(Math.Floor(2.3).ToString(CreateMaskingString(2))); //this will output 2.00
正如RomCoo所指出的,一个更简单、更优雅的解决方案是这样的:

string percentage = Math.Floor(NumA/NumB).ToString("F" + numberOfDigits);
这里的“F”是什么意思?你可以看报纸。但基本上:

定点(“F”)格式说明符将数字转换为字符串 格式“-ddd.ddd…”,其中每个“d”表示一个数字(0-9)。这个 如果数字为负数,则字符串以减号开头

使用ToString()方法将数字转换为字符串。使用参数“FX”将其显示为带X位的浮点。e、 g.“F2”表示两位数字

string percentage = Math.Floor(NumA/NumB).ToString("F"+numberOfDigits);

相关:这是一个很好的解决方案,但我希望通过指定“numberOfDigits”@Peroxy中的位数来保持此配置。您可以使用
新字符串('0',numberOfDigits)
而不是
来执行
-循环。我认为这更具可读性。@Koopakiller啊,是的,好得多,我同意。你能解释一下你的解决方案是如何工作的吗?这对其他游客来说会很好。顺便说一句,内部
ToString
是不必要的。