字符串格式double,具有任意精度,固定小数位

时间:2014-07-18 21:56:10

标签: c# string c#-4.0 formatting string-formatting

我想编写一个接受4个参数的函数,并打印出满足以下条件的字符串:

  1. 小数应位于字符串位置X(其中X为常量)。就这样,当我 打印一系列这样的字符串,小数位总是行 起来。
  2. 实际上,双精度小数点左边通常最多5位数,包括负号。小数点右侧最多7位数字。
  3. 其他字段左对齐且具有固定的列宽。
  4. 到目前为止,我已经能够处理4列中的3列;但是,我在使用十进制参数时遇到问题。我似乎无法弄清楚如何将任意精度与固定的小数位组合。这是我到目前为止所得到的:

    public String PrintRow(string fieldName, string fieldUnit, double value, string description){ 
        return string.Format(
            " {0,4}.{1,-4}        {2,8:####0.0000####} : {3,-25}\n", 
            fieldName, fieldUnit, value, description);
    }
    

    以下是我希望能够做出的一些示例输出:

     STRT.M            57.4000                 : Start
     STOP.M           485.8000                 : Stop
     STEP.M             0.1524                 : Step
     SMTN.FT         -111.2593615              : Something Cool
    

    我该怎么办?

1 个答案:

答案 0 :(得分:2)

这可以给你你想要的东西:

public static string PrintRow(string token, string unit, double value, string desc)
{
    // convert the number to a string and separate digits
    // before and after the decimal separator
    string[] tokens = value
        .ToString()
        .Split(new string[] { CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator }, StringSplitOptions.RemoveEmptyEntries);

    // calculate padding based on number of digits
    int lpad = 11 - tokens[0].Length;
    int rpad = 19 - tokens[1].Length;

    // format the number only
    string number = String.Format("{0}{1}.{2}{3}",
        new String(' ', lpad),
        tokens[0],
        tokens[1],
        new string(' ', rpad));

    // construct the whole string
    return string.Format(" {0,-4}.{1,-4}{2}  : {3,-23}\n",
        token, unit, number, desc);
}