2012-02-13 122 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);