1.問題描述:
最近在處理軟件結果顯示時,發現如果利用 Math.Round(Number,N) 取N為小數時,有的結果不能顯示完全
比如:15.3245 和 0.00106 兩個數字,如果 N=2 ,保留下來是15.32 和 0.00,這顯然不是我想要的結果。
我想要的結果是 15.32 和 0.0011(保留兩位有效數字),怎么實現呢?
2.先科普一下有效位數:(百度百科)https://baike.baidu.com/item/%E6%9C%89%E6%95%88%E4%BD%8D%E6%95%B0/415981?fr=aladdin
3.思想:①找出小數點的位置;②從小數點往后數,找到第一個不為 0 的數所在位置;③根據要求,往后取所需位數即可。
4.實現:
class Program { static void Main(string[] args) { double DNumber=105.04056789; //給定數字 int EffectiveCount = 2; //保留有效數字位數 string SNumber = DNumber.ToString(); char[] CNumberArr = SNumber.ToCharArray(); int DotIndex = SNumber.IndexOf('.'); //不知道怎么索引“double”類型,選擇了一個笨方法 double Value = 0 ; //輸出值 int TempPrecision = 0; //記錄小數點后,第一個不為 0 的位置 for (int i = DotIndex+1; i < SNumber.Length; i++) { TempPrecision++; if (CNumberArr[i] != '0') { Value = Math.Round(DNumber, TempPrecision + EffectiveCount-1); break; } } Console.WriteLine(Value); Console.ReadKey(); } }
5. 最后說兩句:檢索了一下網上的方法,貌似可以用“正則表達式”實現,但是對於本菜鳥來說太難了,如果有大神知道,希望不吝賜教。
打完收工!