excel中用round()能实现指定位数的小数保留,但是需要保留指定位数的有效数字的时候往往力不从心,本经验通过公式和算法可以实现大于1时保留指定个数的小数数字,小于1的小数保留指定位数的小数数字。
工具/原料
excel
方法/步骤
1、获取小数当中第一个非零数的位置。原理是从小数点开奘疚豫枭始查找1-9数字的位置,然后求出其中的最小值,也就是第一个非零数字的位置数,该数包含小数点和小数点之前的数字。=MIN(IFERROR(僻棍募暖FIND(1,B66,FIND(小数点,B66)),10000),IFERROR(FIND(2,B66,FIND(小数点,B66)),10000),IFERROR(FIND(3,B66,FIND(小数点,B66)),10000),IFERROR(FIND(4,B66,FIND(小数点,B66)),10000),IFERROR(FIND(5,B66,FIND(小数点,B66)),10000),IFERROR(FIND(6,B66,FIND(小数点,B66)),10000),IFERROR(FIND(7,B66,FIND(小数点,B66)),10000),IFERROR(FIND(8,B66,FIND(小数点,B66)),10000),IFERROR(FIND(9,B66,FIND(小数点,B66)),10000))
2、对于小于1的数字,其前两位为0和小数点,于是可以得到要四舍五入的小数位数为:x-2+y-1y为指定的有效数字位数如0.0000345678,x=7,指定y=3,那么要保留到小数第7位。得到0.0000346
3、对于大于1的数字,要先知道小数点前面是多少位。其实可以用_find查找小数点的位置就可以知道小数点前面有几位。但是这里考虑的是小数部分,可以加个if别一下:=IF(INT(B66)-1>=0,ROUND(B66,y),ROUND(B66,x-2+y-1))
4、如果只考虑有效数字,对于整数部分也四舍五入的话,可以先求出整数部分的位数,然后化成小数,根据上述类似的方法求出小数的有效数字保留值,再乘以整数部分数字个数个10就可以还原了。ROUND(B71/10^(find(小数点,B71)-1),5)*10^find(小数点,B71)
5、合并之后如下:=I掂迎豢畦F(INT(B66)-1>=0,ROUND(B71/10^(find(小数点,B71)-1),y)*10^(find(蟛杆戛攉小数点,B71)-1),ROUND(B66,MIN(IFERROR(FIND(1,B66,FIND(小数点,B66)),10000),IFERROR(FIND(2,B66,FIND(小数点,B66)),10000),IFERROR(FIND(3,B66,FIND(小数点,B66)),10000),IFERROR(FIND(4,B66,FIND(小数点,B66)),10000),IFERROR(FIND(5,B66,FIND(小数点,B66)),10000),IFERROR(FIND(6,B66,FIND(小数点,B66)),10000),IFERROR(FIND(7,B66,FIND(小数点,B66)),10000),IFERROR(FIND(8,B66,FIND(小数点,B66)),10000),IFERROR(FIND(9,B66,FIND(小数点,B66)),10000))-2+y-1))