今天下午,一朋友寫了一個把輸入的整型或浮點數轉換為科學計數法表示的演算法,寫好後叫我去幫他看看有沒有什麼bug之類的沒有考慮周全。我還沒有細看就已經把我嚇到了----整整寫了將近三百行代碼。我也沒說他什麼,只是回到我的電腦前自己寫了一個試試。
需求:輸入一個數,用科學計數法表示,要有三位有效數字,冪數部分也要求是三位,不足則補零
代碼如下:
public abstract class ScienceCount<br /> {<br /> public static string KXJSF(double num)<br /> {<br /> double bef =System.Math.Abs(num);<br /> int aft=0;<br /> while (bef >= 10 ||(bef < 1&& bef!=0))<br /> {<br /> if (bef >= 10)<br /> {<br /> bef = bef / 10;<br /> aft++;<br /> }<br /> else<br /> {<br /> bef = bef * 10;<br /> aft--;<br /> }<br /> }<br /> return string.Concat(num>=0?"":"-",ReturnBef(bef),"E",ReturnAft(aft));<br /> }<br /> /// <summary><br /> /// 有效數位處理<br /> /// </summary><br /> /// <param name="bef">有效數字</param><br /> /// <returns>三位有效數字,不足則補零</returns><br /> public static string ReturnBef(double bef)<br /> {<br /> if (bef.ToString() != null)<br /> {<br /> char[] arr = bef.ToString().ToCharArray();<br /> switch (arr.Length)<br /> {<br /> case 1:<br /> case 2: return string.Concat(arr[0] , "." , "00"); break;<br /> case 3: return string.Concat(arr[0] + "." + arr[2] + "0"); break;<br /> default: return string.Concat(arr[0] + "." + arr[2] + arr[3]); break;<br /> }<br /> }<br /> else<br /> return "000";<br /> }<br /> /// <summary><br /> /// 冪的處理<br /> /// </summary><br /> /// <param name="aft">冪數</param><br /> /// <returns>三位冪數部分,不足則補零</returns><br /> public static string ReturnAft(int aft)<br /> {<br /> if (aft.ToString() != null)<br /> {<br /> string end;<br /> char[] arr = System.Math.Abs(aft).ToString().ToCharArray();<br /> switch (arr.Length)<br /> {<br /> case 1: end = "00" + arr[0]; break;<br /> case 2: end = "0" + arr[0] + arr[1]; break;<br /> default: end = System.Math.Abs(aft).ToString(); break;<br /> }<br /> return string.Concat(aft >= 0 ? "+" : "-" , end);<br /> }<br /> else<br /> return "+000";<br /> }<br /> }<br />本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/miss_my_god/archive/2009/12/10/4982055.aspx
調用代碼:
static void Main()<br /> {<br /> string num = "0";<br /> while (num != "#")<br /> {<br /> num = Console.ReadLine();<br /> if(!string.IsNullOrEmpty(num.Trim()))<br /> Console.WriteLine(ScienceCount.KXJSF(double.Parse(num)));<br /> }<br />}<br />
代碼可運行,且基本滿足要求(沒有考慮輸入字元的情況),若有不足請各位看客慷慨指出。