Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】Stop Using parseInt - Here's Why It's Slowing You Down

2025年09月17日に「Dev.to」が公開したITニュース「Stop Using parseInt - Here's Why It's Slowing You Down」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

JavaScriptで数字の小数点以下を切り捨てる際、parseIntは本来文字列変換用で処理が遅い。代わりにMath.truncを使うと、高速で意図が明確になり、コードの可読性とパフォーマンスが向上する。parseIntでの切り捨ては避け、Math.truncの使用を推奨する。

ITニュース解説

多くのシステム開発でJavaScriptを使用する際、数値の小数部分を切り捨てたい場面は頻繁に現れる。これまで、その目的でparseInt()関数を利用していた人もいるかもしれない。しかし、この方法はコードのパフォーマンスを低下させ、意図を不明瞭にする可能性があるため、使用を避けるべきであるという指摘がある。

parseInt()は、本来文字列を整数に変換するために設計された関数だ。例えば、"4.9"という文字列から整数部分の4を取り出すといった用途を想定している。ところが、数値を引数として渡した場合、JavaScriptの内部で一度その数値を文字列に変換してから処理を行う。そのため、parseInt(4.9)のように数値を渡すと、結果として4が返ってくるため、小数部分を切り捨てているように見える。しかし、この裏側で行われる「数値→文字列→整数」という変換プロセスは、直接数値を操作するよりも多くの処理時間とリソースを消費する。特に、プログラムが繰り返し数値の切り捨てを行うような場面(例えば、ループ処理の中やアニメーションの計算、リアルタイムなデータ処理など)では、このわずかな処理時間の差が積もり積もって、全体としてシステムの動作を著しく遅くする原因となる可能性がある。さらに、parseInt()は本来の目的とは異なる使われ方であるため、そのコードを読んだ他の開発者(あるいは未来の自分自身)が「なぜここでparseInt()を使っているのか?」と疑問に感じ、コードの意図を理解するのに時間がかかってしまうという問題も抱えている。

では、数値を最も効率的かつ明確に切り捨てるにはどうすればよいのか。その答えはMath.trunc()関数にある。 Math.trunc()は、与えられた数値の小数部分を単純に破棄し、整数部分のみを返す関数だ。例えば、Math.trunc(4.9)4を返し、Math.trunc(-4.9)-4を返す。この関数は、parseInt()のように余計な文字列変換のプロセスを経ないため、非常に高速に動作する。ベンチマークテストでは、Math.trunc()parseInt()と比較して最大で5倍も高速であるという結果が出ている。また、その名前が示す通り「trunc」(truncate、切り捨てる)という明確な目的を持つため、コードを読んだ人がその意図を瞬時に理解できる。これは、コードの可読性を高め、保守性を向上させる上で非常に重要な要素となる。数値の小数部分を切り捨てるという目的においては、Math.trunc()が最も優れた選択肢と言える。

JavaScriptには、Math.trunc()以外にも数値を操作するいくつかの方法が存在するが、それぞれに特性があり、使用する際には注意が必要だ。

まず、「ビット演算子」を使った方法がある。これは、数値を2進数として扱い、ビットレベルで操作を行うものだ。

  • | 0(ビットOR演算子):4.9 | 0のように記述すると4が返る。
  • ~~(二重ビットNOT演算子):~~4.9のように記述すると4が返る。 これらの方法は非常に高速に動作するというメリットがある。しかし、JavaScriptのビット演算子は32ビット整数に限定されるという制約がある。そのため、非常に大きな数値や小数点以下の精度が重要な数値を扱う場合には、意図しない結果を招く可能性がある。安易な使用は避けるべきだ。

次に、Math.floor()Math.ceil()がある。これらは厳密には「切り捨て」ではなく「丸め込み」のための関数だ。

  • Math.floor()は、与えられた数値以下の最大の整数を返す。つまり、常に数値を「床(floor)」に近づけるように切り下げる。例えば、Math.floor(4.9)4を返す一方で、Math.floor(-4.9)-5を返す。負の数の場合は注意が必要だ。
  • Math.ceil()は、与えられた数値以上の最小の整数を返す。つまり、常に数値を「天井(ceil)」に近づけるように切り上げる。例えば、Math.ceil(4.9)5を返し、Math.ceil(-4.9)-4を返す。 これらの関数は、特定の丸め込みが必要な場合には有用だが、単純な小数部分の切り捨てとは動作が異なるため、目的を明確にして使い分ける必要がある。

最後に、Number.toFixed(0)という方法もある。このメソッドは数値を指定された小数点以下の桁数で丸め、その結果を文字列として返す。 (4.9).toFixed(0)"5"を返す。もし数値として扱いたい場合は、さらにNumber()関数などで変換する必要がある(例: Number((4.9).toFixed(0)))。この方法は、数値のフォーマットを整える目的には適しているが、単純な切り捨てとは異なり、丸め込みが行われる点と、結果が文字列になる点に注意が必要だ。また、parseInt()と同様に内部で文字列変換が発生するため、パフォーマンスもMath.trunc()には劣る。

まとめると、数値の小数部分を切り捨てて整数を得たいという目的においては、Math.trunc()が最も優れた選択肢だ。その理由は、高速であること、コードの意図が明確であること、そして負の数に対しても直感的な「切り捨て」の動作をするためだ。開発者として、私たちは単にコードが「動けばよい」と考えるのではなく、「どのように動くのか」「なぜそのように書かれているのか」を明確に、そして効率的に記述することが求められる。これは、自分自身のためだけでなく、将来コードを修正・改善する可能性のある他の開発者のためでもある。適切なツールを選択し、ベストプラクティスに従うことで、より読みやすく、より高速で、より意味のあるソフトウェアを開発することができる。日々の小さな選択が、より良いコード、より良いシステムへと繋がっていくのだ。

関連コンテンツ