2012-09-28 84 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