C# 保留有效数字的方法

有效数字的概念

有效数字是指在分析工作中实际能够测量到的数字。能够测量到的是包括最后一位估计的,不确定的数字。 我们把通过直读获得的准确数字叫做可靠数字;把通过估读得到的那部分数字叫做存疑数字。把测量结果中能够反映被测量大小的带有一位存疑数字的全部数字叫有效数字。测得物体的长度5.15cm。数据记录时,我们记录的数据和实验结果真值一致的数据位便是有效数字。

另外在数学中,有效数字是指在一个数中,从该数的第一个非零数字起,直到末尾数字止的数字称为有效数字,如0.618的有效数字有三个,分别是6,1,8。

有效数字是在整个计算过程中大致维持重要性的近似规则。 更复杂的科学规则被称为不确定性的传播。

数字往往是四舍五入,以避免报告微不足道的数字。 例如,如果秤仅测量到最接近的克,读数为12.345公斤(有五个有效数字),则会产生12.34500公斤(有七个有效数字)的测量误差。 数字也可以简单化,而不是指示给定的测量精度,例如,使它们在新闻广播中更快地发音。

更详细的介绍可以查看下面点击下面链接查看:
有效数字_百度百科 (baidu.com)

C# 保留有效数字的方法

可以使用ToString(“G”)方法,指定相关格式可以是G1、G2...Gn。
例如:
double d = 1.03682; d.ToString("G3"); // 1.04
double d = 1.03682; d.ToString("G4"); // 1.037
double d = 0.03682; d.ToString("G3"); // 0.0368
double d = 0.03682; d.ToString("G4"); // 0.03682
以上的数字转换是完全OK的,另一种情况:
double d = 1.04; d.ToString("G4"); // 1.04 应该是1.040
double d = 0.04; d.ToString("G4"); // 0.04 应该是0.04000
这两种情况应该自动补0,但C#好像并不支持,我也没找到相关的方法,所有自己重新改造了下。具体方法如下:

public static string ReturnBef(double bef, int digit)
        {
            var res = bef.ToString($"G{digit}");
            if (res.Contains("."))
            {
                var index = Regex.Match(res, "([1-9])").Index;
                var sub = res.Substring(index).Replace(".", "");
                var leg = sub.Length;
                while (leg < digit)
                {
                    res += "0";
                    leg++;
                }
            }
            else
            {
                var leg = res.Length;
                res += ".";
                while (leg < digit)
                {
                    res += "0";
                    leg++;
                }
            }
            
            return res;
        }

测试:
ReturnBef(1.03682, 3); // 1.04
ReturnBef(1.03682, 4); // 1.037
ReturnBef(0.03682, 3); // 0.0368
ReturnBef(0.03682, 4); // 0.03682
ReturnBef(1.04, 4); // 1.040
ReturnBef(0.04, 4); // 0.04000

各位大佬如果有更简便的方法,可以交流交流~

你可能感兴趣的:(C# 保留有效数字的方法)