🥶

【JS】Excelの演算子には気をつけようという話

2022/04/15に公開

はじめに

めちゃくちゃ根本的なミス、「演算子が違う」式でやらかした記録です。

終わりの始まり

JSで実装するシミュレーション案件があったのですが、
Excelの式で計算式が送られてきました。

ほぼ演算子が同じなのでひとまずそのままコピペしてテストしながら書き換えよう!
としたのが終わりの始まりでした。

計算結果は違うけどエラーにはならない
rate = (ir / 12) / (1 - 1 / ((1 + (ir / 12)) ^ total));

この式、特におかしいところもなく計算は通ります。
ところが計算式を何度見直しても計算結果がExcelとは合いません。なぜ...
それもそのはず...

_人人人人人人人_
> 演算子が違う <
 ̄Y^Y^Y^Y^Y^Y^ ̄

解説

Excelでのべき乗は^です。
が、JSでのべき乗演算子は**なのです...(初歩的ミスすぎて辛い)

だいたい演算子が違うような根本的なミスはエラー吐いたりNaN出してくれるので気づくのですが、
今回の場合、^がJSでビット排他的論理和として通っていたのです...😭
そのままでも計算は通るので怖い...(演算子ぐらい覚えとけよ...)

やりたかった計算式
rate = (ir / 12) / (1 - 1 / ((1 + (ir / 12)) ** total));

余談

ちなみにビット排他的論理和なんて使ったことなかったのですが、

ビット排他的論理和演算子 (^) は、両方のオペランドの対応するビットの一方だけが 1 である位置のビットで 1 を返します。

だそうです。

参考

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Bitwise_XOR

Discussion