2016-04-17 6 views
1

には、n個のsiginifacant数字だけを表示するような二重の値をフォーマットする方法がありますか?C#数値形式:n桁の有効数字を表示しますか?

たとえば、私は123456の値を持つdouble型を持っています。最初の3桁のみを表示するようなフォーマット文字列を使用できますか?

double x=12346; 
string s=x.ToString("Some format"); //display 123 only 

は可能ですか?

答えて

0

小数点の一部または全部を削除できるフォーマットがありますが、フォーマットによっては数値全体の有効数字の一部を削除することはできません。

数値の最初の3桁を保持する場合は、その全体の部分が3桁になるように値を分割する必要があります。

除数を計算するための一つのアプローチは、それが2以上であるかどうかをチェック、ログ Nを取り、対応する電力を10で除算される:

private static void Print(double x) { 
    int n = (int)Math.Log10(x); 
    if (n > 2) { 
     x /= Math.Pow(10, n-2); 
    } 
    Console.WriteLine((int)x); 
} 

Demo.

+0

ありがとうございますが、フォーマット文字列が必要ですが、同じ結果を得るために "#、##"などのフォーマット文字列を指定する方法はありますか? –

+1

@MinaSamy私は、そのような書式指定子がないことは合理的に確信しています。 – dasblinkenlight

+0

ありがとうございます、そうです、そのような書式指定子がないようです –

0

あなたができません2倍の最大部分をフォーマットして3つの信号にします。イチジク。文字列を分割することができます。試してみてください:

String s = x.ToString().Substring(0, n); 

ここで、nは、保持したい有効数字の数字です。

0

この例ではコンソールアプリケーションを作成しました。私はあなたが数値のdoubleまたはintデータ型が必要です知っているが、私はどのようにポイントの後に10進数を操作するか分からなかったので、私は文字列を使用した(あなたが気にしない場合は、 ):

 string number = ""; 
     string digits = ""; 
     int n = 0; 
     int count = 0; 

     number = "45.6"; 
     //number = "456"; 
     n = 3; 

     if (number.Contains('.')) //If the number has decimals... 
     { 
      if (n < number.Length) 
      { 
       if (number.IndexOf('.') < n) 
       { 
        while (count <= n) //... we will count the number in a different way. 
        { 
         if (number[count] != '.') 
         { 
          digits = digits + number[count]; 
         } 

         count++; 
        } 
       } 
       else 
       { 
        while (count < n) 
        { 
         if (number[count] != '.') 
         { 
          digits = digits + number[count]; 
         } 

         count++; 
        } 
       } 
      } 
     } 
     else 
     { 
      if (n <= number.Length) 
      { 
       while (count < n) //If not, we count without the decimal point. 
       { 
        digits = digits + number[count]; 
        count++; 
       } 
      } 
     } 

     Console.WriteLine("N significant digits: " + digits); 

あなたは小数と整数で試すことができますが、コードの中で、彼らは両方の文字列です。前述のように、このデータ型を使用しても構わない場合は、この例が役に立ちます。そうでない場合は、Stringクラスの「Substring」関数を使用してみてください。

関連する問題