Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Try this:</p> <pre><code>static class Extensions { static string[] prefixes= { "f", "a", "p", "n", "μ", "m", string.Empty, "k", "M", "G", "T", "P", "E" }; public static string Nice(this double x, int significant_digits) { //Check for special numbers and non-numbers if(double.IsInfinity(x)||double.IsNaN(x)||x==0||significant_digits&lt;=0) { return x.ToString(); } // extract sign so we deal with positive numbers only int sign=Math.Sign(x); x=Math.Abs(x); // get scientific exponent, 10^3, 10^6, ... int sci= x==0? 0 : (int)Math.Floor(Math.Log(x, 10)/3)*3; // scale number to exponent found x=x*Math.Pow(10, -sci); // find number of digits to the left of the decimal int dg= x==0? 0 : (int)Math.Floor(Math.Log(x, 10))+1; // adjust decimals to display int decimals=Math.Min(significant_digits-dg, 15); // format for the decimals string fmt=new string('0', decimals); if(sci==0) { //no exponent return string.Format("{0}{1:0."+fmt+"}", sign&lt;0?"-":string.Empty, Math.Round(x, decimals)); } // find index for prefix. every 3 of sci is a new index int index=sci/3+6; if(index&gt;=0&amp;&amp;index&lt;prefixes.Length) { // with prefix return string.Format("{0}{1:0."+fmt+"}{2}", sign&lt;0?"-":string.Empty, Math.Round(x, decimals), prefixes[index]); } // with 10^exp format return string.Format("{0}{1:0."+fmt+"}·10^{2}", sign&lt;0?"-":string.Empty, Math.Round(x, decimals), sci); } // test code static void Main(string[] args) { double x=Math.PI/10e20; do { Console.WriteLine(string.Format( "\t{0,20} = {1}", x, x.Nice(4))); x*=10; } while(x&lt;=Math.PI*10e20); } } </code></pre> <p>Test output with four significant digits:</p> <pre><code> 3.14159265358979E-19 = 314.2·10^-2 1.5707963267949E-18 = 1.571f 7.85398163397448E-18 = 7.854f 3.92699081698724E-17 = 39.27f 1.96349540849362E-16 = 196.3f 9.8174770424681E-16 = 981.7f 4.90873852123405E-15 = 4.909a 2.45436926061703E-14 = 24.54a 1.22718463030851E-13 = 122.7a 6.13592315154256E-13 = 613.6a 3.06796157577128E-12 = 3.068p 1.53398078788564E-11 = 15.34p 7.6699039394282E-11 = 76.70p 3.8349519697141E-10 = 383.5p 1.91747598485705E-09 = 1.917n 9.58737992428526E-09 = 9.587n 4.79368996214263E-08 = 47.94n 2.39684498107131E-07 = 239.7n 1.19842249053566E-06 = 1.198µ 5.99211245267829E-06 = 5.992µ 2.99605622633914E-05 = 29.96µ 0.000149802811316957 = 149.8µ 0.000749014056584786 = 749.0µ 0.00374507028292393 = 3.745m 0.0187253514146196 = 18.73m 0.0936267570730982 = 93.63m 0.468133785365491 = 468.1m 2.34066892682745 = 2.341 11.7033446341373 = 11.70 58.5167231706864 = 58.52 292.583615853432 = 292.6 1462.91807926716 = 1.463k 7314.5903963358 = 7.315k 36572.951981679 = 36.57k 182864.759908395 = 182.9k 914323.799541975 = 914.3k 4571618.99770987 = 4.572M 22858094.9885494 = 22.86M 114290474.942747 = 114.3M 571452374.713734 = 571.5M 2857261873.56867 = 2.857G 14286309367.8434 = 14.29G 71431546839.2168 = 71.43G 357157734196.084 = 357.2G 1785788670980.42 = 1.786T 8928943354902.1 = 8.929T 44644716774510.5 = 44.64T 223223583872552 = 223.2T 1.11611791936276E+15 = 1.116P 5.58058959681381E+15 = 5.581P 2.79029479840691E+16 = 27.90P 1.39514739920345E+17 = 139.5P 6.97573699601726E+17 = 697.6P 3.48786849800863E+18 = 3.488E 1.74393424900432E+19 = 17.44E 8.71967124502158E+19 = 87.20E 4.35983562251079E+20 = 436.0E 2.1799178112554E+21 = 2.180·10^21 </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload