累乗を行うはずの関数を書いていますが、指定された最後の n 桁のみを表示します。それはうまく機能しています...ほとんど。なんらかの理由で、必要な最後の桁の数を指定すると、12 までは正常に機能します。12 を超える桁数では、非常に奇妙な数値が得られるようです。明らかな何かが欠けているに違いないことはわかっていますが、実際にはわかりません。
コードは次のとおりです。
function power(base, exponent, digits) {
total = base;
for(i = 1; i < exponent; i++) {
total = total * base;
if(total.toString().length > digits) {
total = total.toString().substr(total.toString().length - digits, digits);
}
}
return total;
}
したがって、いくつかの例 (12 桁以下の表示は問題なく動作します):
power(999, 999, 1) を実行すると => 9 になります
power(999, 999, 5) を実行すると、=> 98999 になります。
power(999, 999, 12) を実行すると、 => 000499998999 になります
ここで混乱が始まります:
power(999, 999, 13) を実行すると、 => 5710054009000 になります
power(999, 999, 14) を実行すると、 => '79077027006000' になります
最初は、ある種の整数制限に達していて、科学的表記法が問題を引き起こしていると思っていましたが、20 桁までは機能するはずなので、そうではないと思います。
if ステートメントで文字列を減らす方法に問題があると思われます。しかし、13 桁未満の計算でなぜ台無しにならないのか、私にはわかりません。
ありがとう!