具有任意精度的双精度字符串格式,固定的十进制位置

本文关键字:位置 十进制 格式 字符串 任意 精度 双精度 | 更新日期: 2023-09-27 18:13:29

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

  1. 小数应该位于字符串位置X(其中X是常量)。这样,当我打印一系列这样的字符串,小数点位置总是行向上
  2. 在实际操作中,双精度数通常在小数点左边最多有5位数字,包括负号。和小数点右边最多7位。
  3. 其他字段左对齐并具有固定的列宽。
到目前为止,我已经能够处理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

我该怎么办?

具有任意精度的双精度字符串格式,固定的十进制位置

这应该是你想要的:

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);
}