2012-06-29 1 views
5

小数点以下2桁で表示するにはどうすればよいですか?0に等しくない最初の2小数点を表示する方法

例:私は0.00045たい0.00045578の場合

と1.0000533535のために、私は1.000053

+0

最初のものは四捨五入によるもの0.00046、可能でしょうか? –

+0

もしあなたが45.2500001342を得れば、あなたはそれが45.25になりたいですか? – craig1231

+0

文字列か小数点以下は? – Jorge

答えて

3

これにはフォーマットが組み込まれていません。

数字の小数部分を取得し、2桁になるまでゼロの数を数えて、それからフォーマットをまとめることができます。例:

double number = 1.0000533535; 

double i = Math.Floor(number); 
double f = number % 1.0; 

int cnt = -2; 
while (f < 10) { 
    f *= 10; 
    cnt++; 
} 

Console.WriteLine("{0}.{1}{2:00}", i, new String('0', cnt), f); 

出力:

1.000053 

注:指定されたコード、実際に負の数のためにそこに数の小数部分である、とされていない場合にのみ機能します。これらのケースをサポートする必要がある場合は、そのチェックを追加する必要があります。

+0

私はループなしで同等のものを書きます: '-ceil(log(x%1、10))'最初のゼロ以外の数字のインデックスを直接与える(例えば、 'log(0.0002)== -3.69..') – phg

+0

非常にエレガントで、私は今日何かを学んだ。 – GrayFox374

3

私のソリューションは、数値を文字列に変換することですしたいです。 "。"を検索し、ゼロ以外の数字が見つかるまでゼロを数えてから2桁を取る。

これは洗練された解決策ではありませんが、一貫した結果が得られると思います。

1

すること(それは同様負#Sのために働く)小数の桁の#を見つけるために解析するのではなく、ゼロを探して使用して、この機能を試してみてください:

private static string GetTwoFractionalDigitString(double input) 
{ 
    // Parse exponential-notation string to find exponent (e.g. 1.2E-004) 
    double absValue = Math.Abs(input); 
    double fraction = (absValue - Math.Floor(absValue)); 
    string s1 = fraction.ToString("E1"); 
    // parse exponent peice (starting at 6th character) 
    int exponent = int.Parse(s1.Substring(5)) + 1; 

    string s = input.ToString("F" + exponent.ToString()); 

    return s; 
} 
関連する問題