7434 | 小数部分を切り捨てて整数値を得る関数 | はくぶん | 2019-09-01 00:04:03 |
普段は一応SE兼PGなので、たまにはプログラム的な話題も少し。 自分にとっては、備忘録代わりに記しておきたいと思う。 どんなプログラム言語にも、小数部分を切り捨てて整数にする関数がある。 自分はどちらかと言うとスクリプト系の言語を使うことが多いが、その中で要注意な言語がある。 PHPにはIntval関数がある。 PerlにはInt関数がある。 VBScriptには、なんとInt関数とFix関数という2つの関数がある。 それぞれに5.31を代入してみる。 PHP:Intval(5.31) 結果:5 Perl:Int(5.31) 結果:5 VBScript:Fix(5.31) 結果:5 VBScript:Int(5.31) 結果:5 どれも小数部分の0.31が切り捨てられて、整数の5が返って来る。 ん?別にどれも同じじゃないか。 一体どこが要注意なんだ? そう、ここまでは問題ないのだ。 問題は次である。 次にそれぞれの関数に-5.31を代入してみる。 PHP:Intval(-5.31) 結果:-5 Perl:Int(-5.31) 結果:-5 VBScript:Fix(-5.31) 結果:-5 VBScript:Int(-5.31) 結果:-6 見ての通り、1つだけ-6という想定外の結果が返って来る。 確かにちょっと考えれば、どういう処理をしているのか分からないでもない。 使い方によっては便利に働く時もあるだろう。 しかし、この関数名でこの結果は、ちょっと危険過ぎやしないか? ほぼ全ての人間は、-5.31の整数値として-5を想定しているだろう。 -5.31の整数値として-6を必要とする場合は無いと言っても過言ではない。 関数名としてあまり馴染みのないFix関数の結果が-6になるのなら、まだそれ程危険はないのかもしれない。 しかし、他のスクリプト言語では-5となるInt関数で-6になるのは、ちょっと危険度が高過ぎるだろう。 マイクロソフトは、なぜそういう選択をしたのだろうか? いずれにせよ、これは絶対に覚えておかなければならない例外である。 VBScriptは、Windowsマシンを使っている人間にとって、手軽に使える便利なスクリプト言語である。 しかも、小数部分を切り捨てて整数値を得るなどという処理は、日常的によく使われる。 そんな手軽な言語の、そんな日常的な処理に、こんな大きな落とし穴がある。 是非とも気を付けてもらいたいものである。 と同時に、自分に対して注意を喚起するためにも、ここにこれを記しておく。 8月が終わり9月になった。 いつの間にか、外では秋の虫が鳴いている。 今夜は非常に涼しい。 夏が終わったことを、幾重にも告げているようだ。 |
|||
メッセージ文字数:1099/1153 | |||