判断是否有小数点,如果有,就把小数中的整数部分!(针对第二参数而言) 保留在第一个元素中,同时把对应的小数压缩第二个元素中,如果不是,应该取出整第一个元素拼接上小数点和当前的整数作为结果!

问题如下:现在如何写实际结果的公式或者其他处理方案!

我们提供函数公式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函数

E精精,公众号:Excel办公实战PowerQuery中最重要的迭代函数
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

处理思路:

判断是否有小数点,如果有,就把小数中的整数部分!(针对第二参数而言)

保留在第一个元素中,同时把对应的小数压缩第二个元素中,如果不是,应该取出整第一个元素拼接上小数点和当前的整数作为结果!

(0)

相关推荐