字符串格式问题

时间:2010-01-26 08:05:03

标签: string c#-2.0

我有以下方法:

public static string ReturnFormat(string input, int maxLength, int decimalPrecision, char formatChar)
  {
   string[] format = new string[2];
   string[] inputs = new string[2];

   inputs = input.Split(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator[0]);

   if (input.Length > maxLength)
   {
    int offset = 0;
    int counter = 0;

    if (inputs[0].Length > maxLength - (1 + decimalPrecision))
    {
     offset = maxLength - (1 + decimalPrecision);
    }
    else
     offset = inputs[0].Length;

    for (int i = 0; i < offset; i++)
    {
     format[0] += formatChar;

     if (counter < decimalPrecision)
     {
      format[1] += '0';
      counter++;
     }
    }

    System.Windows.Forms.MessageBox.Show("{0:" + format[0] + "." + format[1] + "}");
    return String.Format(CultureInfo.CurrentCulture, "{0:" + format[0] + "." + format[1] + "}", input);
   }
   else
    return input;
  }

我说使用的是:

ReturnFormat("12.3456789011243", 10, 2, '#') // format is {0:##.00} // output 12.3456789011243
ReturnFormat("12345678901.1243", 10, 2, '#') // format is {0:#######.00} // output 12345678901.1243

现在我的问题是输入字符串格式不正确,格式strig似乎还可以。 对我做错了什么想法?

1 个答案:

答案 0 :(得分:2)

你的输入是一个String而不是一个Double,所以它的格式就像一个字符串:在这种情况下格式化不知道小数位。

您可以使用Double.Parse()将字符串转换为Double值,但要注意使用正确的文化。

另一方面,在两种情况下都没有使用更自然的格式{0:0.00}的具体原因吗?如果你真的想使用占位符来表示数字,那么#就好了,否则0是最好的。

经过测试的解决方案(要小心它会截断并且不会舍入)我需要一些时间来了解实际需要的内容:

public static string ReturnFormat(string input, int maxLength, int decimalPrecision)
{
    if (input.Length <= maxLength)
        return input;
    Char separator = CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator[0];
    string[] inputs = input.Split(separator);
    // NB: truncating rather than rounding
    if (inputs[1].Length > decimalPrecision)
        inputs[1] = inputs[1].Substring(0, decimalPrecision);
    int digits = (maxLength - decimalPrecision - 1);
    // NB: truncating rather than rounding, adding ~ to signalize the
    // presence of missing significant digits
    if (inputs[0].Length > digits)
        inputs[0] = inputs[0].Substring(0, digits-1) + "~";
    return inputs[0] + separator + inputs[1];
}