C#-字符串格式:双固定宽度

C#-字符串格式:双固定宽度,c#,double,fixed-width,custom-formatting,C#,Double,Fixed Width,Custom Formatting,如何在C#中使用String.Format,因此双精度显示如下: 价值观: -1.0 1.011 100.155 1000.25 11000.52221 显示的字符串: -1.00 1.011 100.2 1000 11001 主要的一点是我的宽度是固定为5个字符,无论什么。我真的不在乎右边显示了多少小数位。如果小数点左边有4个或4个以上的数字,我希望删除小数点右边的所有数字(包括小数点本身) 这似乎应该是一个相当标准的做法。但是我没有太多的运气找到一个有效的答案 对上面的显示字符串进行了

如何在C#中使用
String.Format
,因此双精度显示如下:

价值观:

-1.0
1.011
100.155
1000.25
11000.52221
显示的字符串:

-1.00
1.011
100.2
 1000
11001
主要的一点是我的宽度是固定为5个字符,无论什么。我真的不在乎右边显示了多少小数位。如果小数点左边有4个或4个以上的数字,我希望删除小数点右边的所有数字(包括小数点本身)


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

对上面的显示字符串进行了几处更正,我确实需要舍入。

谢谢

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
,具体取决于您的实现)

如果要在许多地方经常使用,请在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();

通常这一规则适用于外汇市场,我将其发展如下:

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");
if(数字<1)
cell.Value=number.ToString(“0.00000”);
否则,如果(数字<10)
cell.Value=number.ToString(“0.0000”);
否则,如果(数量<100)
cell.Value=number.ToString(“00.000”);
否则,如果(数量<1000)
cell.Value=number.ToString(“000.00”);
否则,如果(数量<10000)
cell.Value=number.ToString(“0000.0”);
否则,如果(数量<100000)
cell.Value=number.ToString(“00000”);

那么
-11111
呢?它应该是
11111
“看起来应该是一个非常标准的做法”-实际上不是。通常的做法是排列小数点…而100.1不应该是100.2?如果你有一个大于5位的数字怎么办?123456是如何处理的?是12345吗?或者它只是超出了范围?@HaemEternal听起来像是Harpo只是希望数字被舍入,没有舍入。是的,这给了我所需要的,是的,我必须添加更多的逻辑来处理舍入。谢谢你。这将使我到达我需要去的地方。也许第一个
if(number<0)
应该是
if(number<1)
是的,你是对的,我已经修改了它。谢谢!