C# 保留兩位“有效數字”,而不是兩位“小數”


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. 最后說兩句:檢索了一下網上的方法,貌似可以用“正則表達式”實現,但是對於本菜鳥來說太難了,如果有大神知道,希望不吝賜教。

打完收工!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM