OpenAI社のGPTのAPIを使用する際、当然ながらトークン数が毎回異なるため、そのコストを計算する場面では、トークン数を大まかに最高位まで切り上げたい時もあります。
例えば、43000、41243、49000のトークン数であれば、一律に「約50000トークン」として計算したいところです。
しかし、Excelで直接このような計算を行う関数は用意されていませんので、僕は関数を組み合わせることにしました。この記事では、特定の数値をその最高位まで切り上げる方法について詳しく説明します。
なお、もしかしたら、もっと良い方法があるかもしれませんが、それは知りません。
最高位まで切り上げるための基本公式
最高位まで切り上げるための基本公式は以下の通りです:
=ROUNDUP(A1 / (10 ^ FLOOR(LOG10(A1), 1)), 0) * (10 ^ FLOOR(LOG10(A1), 1))
この公式は二つの主要なステップで構成されていますので、順次に説明していきますが、そこまで知りたいわけではないという方はブラウザを閉じてください。
ステップ1:桁数の計算
まず、対象となる数値の桁数を計算します。これはLOG10関数とFLOOR関数を組み合わせることで実現します。
LOG10関数で桁数を計算
LOG10関数は、指定された数値の10を底とする対数を計算します。
例:LOG10(1000)は3になります。これは10の3乗が1000であることを意味します。
この関数は、数値が10の何乗であるかを示すので、桁数の計算に適しています。
FLOOR関数で桁数を確定
FLOOR関数は、指定された数値を指定された基数(この場合は1)まで切り捨てます。
例:FLOOR(3.14, 1)は3になります。これは3.14を最も近い下の整数に切り捨てることを意味します。
対数を使って得られた数値を整数に切り捨てることで、数値の桁数を確定します。
ステップ2:切り上げ処理
次に、切り上げるための計算を行います。これは数値を適切な10の冪で割り、その結果を切り上げて再び10の冪をかけることで行われます。
10の指数を求める
まず、10 ^ FLOOR(LOG10(A1), 1)を計算します。これは、元の数値を最も近い10の指数(桁数から1を引いた値)で割ることを意味します。
例:数値が3444の場合、10の指数は10 ^ 3(1000)になります。
ROUNDUP関数
ROUNDUP関数は、数値を指定された桁数まで切り上げます。
この場合、ROUNDUP(A1 / (10 ^ FLOOR(LOG10(A1), 1)), 0)は、元の数値を10の指数で割った後、その結果を最も近い整数まで切り上げます。
例:数値が3444の場合、3444 / 1000は3.444になり、ROUNDUPにより4に切り上げられます。
最終的な計算
最後に、切り上げた数値に再び10の指数をかけます。
これにより、元の数値の最高位が切り上げられ、他の位は0になります。
具体例を使った解説
12000の場合:LOG10(12000)は約4.08で、FLOORにより4になります。その後、12000 / 10000を計算し、1.2になります。ROUNDUPで2に切り上げ、最終的に2 * 10000で20000になります。
3444の場合:LOG10(3444)は約3.54で、FLOORにより3になります。その後、3444 / 1000を計算し、3.444になります。ROUNDUPで4に切り上げ、最終的に4 * 1000で4000になります。
34の場合:LOG10(34)は約1.53で、FLOORにより1になります。その後、34 / 10を計算し、3.4になります。ROUNDUPで4に切り上げ、最終的に4 * 10で40になります。
まとめ
このような記事は、特に「まとめは要らない」とは思いますが、まとめがあった方がSEO的に良いという都市伝説もあるようなので、最後に、この記事のまとめとして、公式をもう一度掲載します。
=ROUNDUP(A1 / (10 ^ FLOOR(LOG10(A1), 1)), 0) * (10 ^ FLOOR(LOG10(A1), 1))


コメント