2016-02-11 56 views
1

我有雙例如1.890。 我怎麼能這樣的格式:來自雙C的字符串格式#

  • 如果是100必須是18.90
  • 如果是10000必須是0.1890
  • 如果爲100000必須0.01890
  • 如果是10必須189.0
  • 如果是1必須是1890年

我嘗試這樣做:

switch (price) 
     { 
      case (int)scales.zero: 
       format = "{0:0}"; 
       break; 
      case (int)scales.one: 
       format = "{0:0}"; 
       break; 
      case (int)scales.two: 
       format = "{0:000}"; 
       break; 
      case (int)scales.three: 
       format = "{0:0000}"; 
       break; 
      case (int)scales.four: 
       format = "{0:00000}"; 
       break; 
      case (int)scales.five: 
       format = "{0:00000}"; 
       break; 
      default: 
       format = "{0:0.00}"; 
       break; 
     } 

     if (!string.IsNullOrWhiteSpace(format)) 
      res = string.Format(format, value); 
     return res; 
+3

爲什麼不把它分開而不是格式化? –

+0

如果我理解它是正確的:取決於'價格'(即什麼可以是'100','10000'等),你想顯示'價值'不同。除了格式之外,您可以像使用'switch'一樣去設置* factor *。然後在最後顯示值爲'string.Format(format,value * factor)'。例如。對於'100'因子是'10',對於'100000'就是'0.1'等。 – Sinatr

+0

我的回答對你沒有幫助嗎? –

回答

0

您的默認子句包含一個點:{0:0.00}。在其他情況下這樣做:{0:0.00000}有5個零。格式化前將數字除以100,1000等。

0

首先,老實說,你的結果有點奇怪。例如;除1的情況外,所有結果都有小數分隔符,但對於1的情況,它沒有任何千位分隔符。這是okey解決這個問題,但似乎很奇怪。其次,我認爲你的雙倍是1890而不是1.890,因爲當你使用你的枚舉值,看起來他們看起來像他們的雙值與供電10的價值。

如果是這樣,讓我們​​先定義您的枚舉值。

enum scales 
{ 
    zero = 1, 
    one = 10, 
    two = 100, 
    three = 1000, 
    four = 10000, 
    five = 100000 
} 

第二,創建具有.作爲小數點分隔,具有空字符串作爲千個分隔符的文化。爲此,我們Clone a InvariantCulture並將它的NumberGroupSeparator設置爲空字符串。

var culture = (CultureInfo)CultureInfo.InvariantCulture.Clone(); 
culture.NumberFormat.NumberGroupSeparator = string.Empty; 

然後我們可以使用文化使用"N" format specifier適當精度來格式化我們的結果,我們與MATHES枚舉值除以我們的雙重價值之後。

double d = 1890; 
int price = 1; 
string result = ""; 
switch (price) 
{ 
    case (int)scales.zero: 
     d = d/(int)scales.zero; 
     result = d.ToString(culture); 
     break; 
    case (int)scales.one: 
     d = d/(int)scales.one; 
     result = d.ToString("N1", culture); 
     break; 
    case (int)scales.two: 
     d = d/(int)scales.two; 
     result = d.ToString("N2", culture); 
     break; 
    case (int)scales.three: 
     d = d/(int)scales.three; 
     result = d.ToString("N3", culture); 
     break; 
    case (int)scales.four: 
     d = d/(int)scales.four; 
     result = d.ToString("N4", culture); 
     break; 
    case (int)scales.five: 
     d = d/(int)scales.five; 
     result = d.ToString("N5", culture); 
     break; 
    default: 
     break; 
} 

Console.WriteLine(result); 

可以的price值更改爲10100100010000100000這將是產生結果,你想要什麼。