2012-09-28 124 views
2

我如何在C#中使用String.Format所以双打显示是这样的:C# - 字符串格式化:双固定宽度

值:

-1.0 
1.011 
100.155 
1000.25 
11000.52221 

显示字符串:

-1.00 
1.011 
100.2 
1000 
11001 

主要点是我的宽度固定为5个字符,不管是什么。我并不在乎有多少小数点显示在右边。如果小数点左边有4个或更多数字,我希望小数点右边的所有内容都被删除(包括小数点本身)。

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

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

谢谢!

+1

怎么样'-11111'?它应该是“11111”。 – Matthew

+0

@Harpo我想这应该是-1111 –

+5

“看起来应该是一个非常标准的做法” - 实际上不是。通常的做法是将小数点排成一行... –

回答

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

+0

是的,这给了我需要的东西,是的,我将不得不添加更多的逻辑来处理舍入。谢谢你。这将使我得到我需要去的地方。 – FodderZone

1

,如果它要经常使用创建双扩展方法并在许多地方。

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(); 
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"); 
+1

也许第一个'if(number <0)'应该是'if(number <1)' – robert4

+0

是的,你是对的,我修改了它。非常感谢! – jones