【问题标题】:`Double.ToString` with N number of decimal places [duplicate]带有N个小数位的`Double.ToString`[重复]
【发布时间】:2020-10-11 15:36:06
【问题描述】:

我知道如果我们想将double 显示为两位十进制数字,则只需使用

public void DisplayTwoDecimal(double dbValue)
{
  Console.WriteLine(dbValue.ToString("0.00"));
}

但是如何将此扩展到N 小数位,其中N 由用户确定?

 public void DisplayNDecimal(double dbValue, int nDecimal)
    {
     // how to display
    }

【问题讨论】:

    标签: c#


    【解决方案1】:

    使用“Nx”表示 x 个十进制数字。

     public void DisplayNDecimal(double dbValue, int nDecimal)
     {
       Console.WriteLine(dbValue.ToString("N" + nDecimal));
     }
    

    【讨论】:

    • 使用 Nx 的副作用是数字将被格式化为千位分隔符,即“1,234.5600”
    • 如果不想要千位分隔符,可以使用Fx
    【解决方案2】:

    我会用这个:

    public string DisplayNDecimal(double dbValue, int nDecimal)
    {
        string decimalPoints = "0";
        if (nDecimal > 0)
        {
            decimalPoints += ".";
            for (int i = 0; i < nDecimal; i++)
                decimalPoints += "0";
        }
        return dbValue.ToString(decimalPoints);
    }
    

    :)

    这里是StringBuilder(虽然可能效率不高,而且肯定需要更多资源)

    public string DisplayNDecimal(double dbValue, int nDecimal)
    {
        StringBuilder decimalPoints = new StringBuilder("0");
        if (nDecimal > 0)
        {
            decimalPoints.Append(".");
            for (int i = 0; i < nDecimal; i++)
                decimalPoints.Append("0");
        }
        return dbValue.ToString(decimalPoints.ToString());
    }
    

    【讨论】:

    • 为什么不使用内置格式化程序??
    • 请记住,这不适用于所有文化,因为所有文化都不使用句点作为小数点。
    猜你喜欢
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    • 2013-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-22
    相关资源
    最近更新 更多