2012-02-13 7 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数字を表示する方法をしたい!

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); 
    } 

注あなたの番号が複数整数の桁数を持っている場合、これは動作しないこと:

+0

ここで動作しないものを指定できますか?あなたは精度が失われていますか? – Tigran

+0

私はもっともっと今説明しようとしました...はい私も前列を失います –

+0

すみません、812.50はどのようにして812.1になりましたか? –

答えて

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

は、私は、これはあなたがとにかく、探してそれを試してみるているものであるか分かりません...

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); 
関連する問題