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. 最后说两句:检索了一下网上的方法,貌似可以用“正则表达式”实现,但是对于本菜鸟来说太难了,如果有大神知道,希望不吝赐教。
打完收工!