学习中,想将数字列里的数字单个相加求和,结果出错,求原因
学习中,想将数字列里的数字单个相加求和,结果出错,求原因
出错原因施阳大神已经分析了,以下语句供参考:
Solution 1:
= Table.AddColumn(源,"合计",each List.Sum(List.Transform(Text.ToList(Text.From([数字])),Number.From)))
Solution 2:
= Table.AddColumn(源,"合计",each Expression.Evaluate(Number.ToText([数字],Text.Repeat("+0",11))))
Solution 3:
= let fx=(x,y)=>if x<10 then x+y
else @fx(Number.IntegerDivide(x,10),Number.Mod(x,10)+y)
in fx(123456789,0)
出错原因施阳大神已经分析了,以下语句供参考:
Solution 1:
= Table.AddColumn(源,"合计",each List.Sum(List.Transform(Text.ToList(Text.From([数字])),Number.From)))
Solution 2:
= Table.AddColumn(源,"合计",each Expression.Evaluate(Number.ToText([数字],Text.Repeat("+0",11))))
Solution 3:
= let fx=(x,y)=>if x<10 then x+y
else @fx(Number.IntegerDivide(x,10),Number.Mod(x,10)+y)
in fx(123456789,0)
学习一下,解2与解3看不懂,能讲解一下吗
法2中:Number.ToText([数字],Text.Repeat("+0",11))
这部分你把它拆开来就知道怎么回事了,比如,Number.ToText(123,"+0+0+0") 结果就是数字123变成了+1+2+3,如果后边格式中的+0的个数比数字位数要多,就会在前边用+0补足。Text.Repeat("+0",11)就是重复11次“+0”。这里取值11次,是因为数字超过11位就变成科学计数了,再相加就没啥意义了,所以取了个临界值。最外层Expression.Evaluate的作用是对表达式返回计算结果。关于Expression.Evaluate,可参考施阳的文章:https://pqfans.com/1232.html
法3叫递归,我也是写着玩的。fx=(x,y)=>if x<10 then x+y else @fx(商,余数相加), 意思就是把数字除以10,得到的商再除以10,只要商大于等于10就不停地把商除以10,直到商小于10了就跳出循环,然后每一次所得的余数就是各个位置上的数字,相加就得到结果了。关于递归,可以参考施阳的文章:https://pqfans.com/2196.html
Abv fyi.
太神奇了,谢谢。
感谢大神,刚刚学习,好多概念没弄清楚,在继续研究大神的指点和代码!!