2012-02-13 98 views
1

有沒有辦法格式化一個總是有用戶指定n數字的雙數字?格式化只顯示4位數字

例如,如果用戶希望看到的總是4位數,採取下列數字爲例:

Original    Formatted 
-------    --------- 
3.42421    3.424 
265.6250   265.6 
812.50    812.5 
12.68798   12.68 
0.68787    0.687 

我提出了這一點,但它只是允許浮動的點數!這不是我想要的!

public string ToEngV(double d, int percision = 0) 
    { 
     string zeros = string.Empty; 

     if (percision <= 0) 
     { 
       zeros += "0"; 
     } 
     else if (percision > 0) 
     { 
      for (int i = 0; i < percision; i++) 
      { 
       zeros += "0"; 
      } 
     } 

     return String.Format("{0:0." + zeros + "}", d) 
    } 

想象我叫上面的方法爲許多像812.50和我設定的精度(這是現在用於所有的數字我要格式化)。顯然,輸出將是812.5

但是,如果我給另一個號碼一樣1.61826我會得到1.6這個遺址在我展示這些數字給用戶的頁面格式。我需要那1.618

因此,我想我的方法總是顯示N數字!

+0

你能指定什麼在這裏不起作用嗎?你放鬆精度了嗎? – Tigran 2012-02-13 09:57:22

+0

我現在試圖解釋更多...是的,我也失去了懷疑 – 2012-02-13 10:03:13

+0

對不起,812.50怎麼變成812.1? – 2012-02-13 10:07:47

回答

2

我不知道,如果你問到舍入或截斷的數字,所以我寫了這個方法:

public static string ToEngV(this double d, int digits, bool round) 
{ 
    var lenght = Math.Truncate(d).ToString().Length; 

    if (lenght > digits) 
    { 
     throw new ArgumentException("..."); 
    } 

    int decimals = digits - lenght; 

    if (round) 
    { 
     return Math.Round(d, decimals).ToString(); 
    } 
    else 
    { 
     int pow = (int)Math.Pow(10, decimals); 
     return (Math.Truncate(d * pow)/pow).ToString(); 
    } 
} 

例子:

var numbers = new double[] { 3.42421, 265.6250, 812.50, 12.68798, 0.68787 }; 
foreach (var number in numbers) 
{ 
    Console.WriteLine(number.ToEngV(4, false)); 
} 
Console.WriteLine() 
foreach (var number in numbers) 
{ 
    Console.WriteLine(number.ToEngV(4, true)); 
} 

輸出:

3.424 
265.6 
812.5 
12.68 
0.687 

3.424 
265.6 
812.5 
12.69 
0.688 

請注意,如果您的號碼有多個整數字比digits你會得到一個ArgumentException

1

我不知道這是你要搜索什麼,反正試試看:

string FmtDbl(double num, int digits) 
    { 
     digits++; // To include decimal separator 
     string ret = num.ToString(); 
     if (ret.Length > digits) return ret.Substring(0, digits); 
     else return ret + new String('0', digits - ret.Length); 
    } 

請注意,如果您的號碼已超過數字整數位,這是行不通...

1

什麼是這樣的:

d.ToString().PadRigth(4,'0').SubString(0,4); 
0
public static void RunSnippet() 
    { 

     Console.WriteLine(myCustomFormatter(3.42421)); 
     Console.WriteLine(myCustomFormatter(265.6250)); 
     Console.WriteLine(myCustomFormatter(812.50)); 
     Console.WriteLine(myCustomFormatter(12.68798)); 
     Console.WriteLine(myCustomFormatter(0.68787)); 
     Console.ReadLine(); 

    } 

    public static double myCustomFormatter(double value) 
    { 
     string sValue = value.ToString(); 
     string sFormattedValue = sValue.Substring(0,5); 
     double dFormattedValue= Convert.ToDouble(sFormattedValue); 
     return dFormattedValue; 
    } 
1
number.ToString("#0.000").Substring(0, 5); 
相關問題