在c#中显示小数到第n位

时间:2014-09-26 13:34:23

标签: c#

我知道我们可以显示小数到达某些地方(如果没有固定的地方)。例如,我们最多可以使用String.Format

显示2个位置
String.Format("{0:0.00}", 123.4567); 

但我们的要求是,我们必须从数据库中取小数位并显示到该位置的十进制值。例如:

int n=no of decimal places

我想写一些类似的东西:

String.Format("{0:0.n}", 123.4567);

任何建议都会有很大的帮助。

添加注意:String.Format将数字四舍五入。我正在寻找遗漏剩余数字的东西。

2 个答案:

答案 0 :(得分:5)

也许:

int n = 3;
string format = String.Format("{{0:0.{0}}}", new string('0', n));
Console.Write(String.Format(format, 123.4567)); // 123,457

方法:

public static string FormatNumber(double d, int decimalPlaces)
{
    string format = String.Format("{{0:0.{0}}}", new string('0', decimalPlaces));
    return String.Format(format, d);
}

甚至更简单,使用ToString + N format specifier

public static string FormatNumber(double d, int decimalPlaces)
{
    return d.ToString("N" + decimalPlaces); 
}

如果您不想要默认的舍入行为,但您只想截断剩余的小数位:

public static string FormatNumberNoRounding(double d, int decimalPlaces)
{
    double factor = Math.Pow(10, decimalPlaces);
    double truncated = Math.Floor(d * factor) / factor;
    return truncated.ToString();
}

答案 1 :(得分:1)

如果您更喜欢字符串格式化,这可能更简单:

decimal d = 123.4567
Console.Write("rounded: {0}", decimial.Round(d, 3));

此外,您可以控制使用的舍入类型:

decimial.Round(d, 3, MidpointRounding.AwayFromZero)

由于没有多少人意识到.NET的默认舍入方法是ToEven,它舍入到最接近的偶数。所以像2.5这样的值实际上是2到2而不是3。