2

如何String.Format在 C# 中使用双打显示如下:

价值观:

-1.0
1.011
100.155
1000.25
11000.52221

显示字符串:

-1.00
1.011
100.2
 1000
11001

重点是我的宽度无论如何都固定为 5 个字符。我真的不在乎右边显示了多少小数位。如果小数点左侧有 4 个或更多数字,我希望删除小数点右侧的所有内容(包括小数点本身)。

这似乎应该是一种非常标准的做法。但是我没有太多运气找到有效的答案。

对上面的显示字符串进行了一些更正,我确实想要四舍五入。

谢谢!

4

3 回答 3

3

通常这条规则适用于交易所市场,我将其开发如下:

if (number < 1)
   cell.Value = number.ToString("0.00000");
else if (number < 10)
   cell.Value = number.ToString("0.0000");
else if (number < 100)
   cell.Value = number.ToString("00.000");
else if (number < 1000)
   cell.Value = number.ToString("000.00");
else if (number < 10000)
   cell.Value = number.ToString("0000.0");
else if (number < 100000)
   cell.Value = number.ToString("00000");
于 2013-02-26T05:04:23.090 回答
2
public string FormatNumber(double number)
{
    string stringRepresentation = number.ToString();

    if (stringRepresentation.Length > 5)
        stringRepresentation = stringRepresentation.Substring(0, 5);

    if (stringRepresentation.Length == 5 && stringRepresentation.EndsWith("."))
        stringRepresentation = stringRepresentation.Substring(0, 4);

    return stringRepresentation.PadLeft(5);
}

编辑:刚刚意识到这不会在必要时在小数点末尾填充零(如在您的第一个示例中),但应该为您提供根据需要完成它的工具。

EDITx2:鉴于您打算进行舍入的最新添加,它变得更加复杂。首先,您必须检查是否有小数位以及小数点在什么位置。然后你必须将它四舍五入到那个小数位,然后可能会遍历输出。请注意,根据您的算法,您可能会在四舍五入的数字上得到一些不正确的结果(例如,-10.9999可能会变成-11.00-11取决于您的实现)

于 2012-09-28T15:22:29.703 回答
1

如果要在很多地方经常使用它,请在 Double 上创建一个扩展方法。

using System;

public static class DoubleExtensionMethods
{
    public static string FormattedTo5(this double number)
    {
        string numberAsText = number.ToString();

        if (numberAsText.Length > 5)
        {
            numberAsText = numberAsText.Substring(0, 5);
        }

        return numberAsText.TrimEnd('.').PadLeft(5);
    }
}

用法将是:

double myDouble = 12345.6789D;

string formattedValue = myDouble.FormattedTo5();
于 2012-09-28T15:29:00.230 回答