在 Excel 中,我想四舍五入到最接近的斐波那契数。
我尝试了类似的方法(抱歉使用法语 Excel):
RECHERCHEH(C7;FIBO;1;VRAI) -- HLOOKUP(C7, FIBO, 1, TRUE)
其中 FIBO 是命名范围(0; 0,5; 1;2;3;5;8;等)
我的问题是这个函数四舍五入到最小的数字而不是最接近的数字。例如,12.8 四舍五入为 8,而不是 13。
注意:我只想使用Excel公式,没有VBA
这会起作用:
=INDEX(FIBO,1, IF(C7>=(INDEX(FIBO,1,(MATCH(C7,FIBO,1)))+
INDEX(FIBO,1,(MATCH(C7,FIBO,1)+1)))/2, MATCH(C7,FIBO,1)+1, MATCH(C7,FIBO,1)))
定义目标数 Targ,相对于我们要找到最接近的 Fib 数。
定义
n = INT(LN(Targ*SQRT(5))/LN((1+SQRT(5))/2))
由此可知 Fib(n) <= Targ <= Fib(n+1)
可以通过
计算 Fib(n) 和 Fib(n+1)Fib(n) = ROUND(((1+SQRT(5))/2)^n/SQRT(5),0)
最后使用 Fib(n) 和 Fin(n+1) 的计算值找到最接近 Targ 的 Fib 数。
不如提出的其他解决方案那么紧凑,因为它需要一些辅助公式,但不需要 Fib 数表。
我使用了更简单的嵌套 IF 解决方案。
我计算了每对斐波那契数之间的中点,并将其用作决策点。以下测试 A2 中的值以生成所需的斐波那契数:
=IF(A2>=30,40,IF(A2>=16.5,20,IF(A2>=10.5,13,IF(A2>=6.5,8,IF(A2>=4,5,IF(A2>=2.5,3,IF(A2>=1.5,2,IF(A2>=0.5,1,0))))))))
也许比嵌套 IF 方法(这是我最喜欢的)更简单:
=IF(T5>13,21,IF(T5>8,13,IF(T5>5,8,IF(T5>3,5,IF(T5>2,3,IF(T5>1,2,如果(T5>=0.5,1,0))))))
(T5 是我的单元格参考,而不是本示例中的 A2)