判断是否有小数点,如果有,就把小数中的整数部分!(针对第二参数而言) 保留在第一个元素中,同时把对应的小数压缩第二个元素中,如果不是,应该取出整第一个元素拼接上小数点和当前的整数作为结果!
问题如下:现在如何写实际结果的公式或者其他处理方案!
我们提供函数公式和Power Query的处理方案!
本文由“壹伴编辑器”提供技术支持
一般处理思路
关于公式,我开始能想到的就是普通的思路,就是从第一个单元格开始往下找,找到第一个小数就是我们想要的其他结果的整数部分,于是写下了如下公式:
=IF((A2&0)/10=--A2,LOOKUP(1,0/(($A$2:A2&0)/10<>--$A$2:A2),INT($A$2:A2))&"."&A2,A2)
利用LOOKUP默认升序,可以查找到最后一个满足条件的特征,找到最近的小数!
这里涉及到一个知识点,那就是如何判断是否是整数!
▌判断整数、小数的思路分享!
那么可以换一种思路,如果你是小数,那么小数部分添加一个0和没添加是没有区别的,比如8.01 和8.010 他们是相等,但是整数 801,你添加0就是8010,显然不等,这样就可以区别开是否是整数!
本文由“壹伴编辑器”提供技术支持
第一个公式处理是没有问题,但是看上去实在是有些冗余!稍微总结一下,你会发现,如果是小数,直接等于自己,否则应该是上一个结果的整数部分作为下一个结果的整数部分!
比如74,取上一个7.89的7,而7.89的7来源于上一个7.00,那么这种就类似于循环依赖的思路来的,可以大大简化公式!
简化公式
公式:
=IF((A2&0)/10=--A2,INT(B1)&"."&A2,A2)
当然如果没有7.00这种特殊的小数情况,还可以更加简单!
=IF(MOD(A2,1),A2,INT(B1)&"."&A2)
MOD取余,这里1的余数也就是小数部分,判断是否是0,来决定是否是正数
这个判断正数的思路,无特殊情况下,可以大大简化公式!
除此之外,大家还有可能想到判断是否有小数点的思路!
=IF(COUNT(FIND(".",A2)),A2,INT(B1)&"."&A2)
但是简化的核心思路,还是在循环依赖的思路!
公式方面我们就先分享这么多,下面我们来看看Power Query如何处理!
本文由“壹伴编辑器”提供技术支持
PowerQuery M函数处理
使用的是我们刚分享过的List.Accumulate函数
let 源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content], toLs = Table.ToList( 源), //初始值 {"",{}}, 第一个存放小数的整数部分,第二参数存放结果 res = List.Accumulate(toLs,{"",{}},(s,c)=> if Text.Contains(c,".") then { Text.Split(c,"."){0},s{1}&{c}} else {s{0},s{1} & {s{0} & "." & c}}){1}, resTB = Table.FromColumns({toLs,res})in resTB
处理思路:
判断是否有小数点,如果有,就把小数中的整数部分!(针对第二参数而言)
保留在第一个元素中,同时把对应的小数压缩第二个元素中,如果不是,应该取出整第一个元素拼接上小数点和当前的整数作为结果!