数値に関する型の種類が多すぎて、どれを使えばいいか分からない…
intを使ってみたけど、桁あふれを起こしてしまった
こんにちは。文系出身で今年現役8年目エンジニアになる佐藤です。
皆さんはC#でプログラミングするとき、「int型」を上手く使えていますか?
プログラミングする上で「型」は非常に大切な要素です。ですが、数値に関する型がたくさんあってどれを使えばいいか分からないという悩みを抱えている方も多いようです。
この記事では「int」がどんな型なのか誰にでも分かりやすく解説し、そのほかの数値に関する型も紹介していきます。筆者の経験上の注意点、型変換なども紹介していきますので、行き詰っている方はぜひそちらもご覧ください。
まずはint型が属している「整数型」について理解してから、int型の概要を確認していきましょう。
C#でのint型とは
この章では、int型の概要について解説していきます。intがどんな型なのか分からない、という方はここからご覧ください。
そもそも整数型とは?
int型の概要の前に、int型が属している「整数型」について簡単に見ていきます。
整数型とは、名前の通り整数しか格納できない型のことです。数値に関する型には、浮動小数点型というものがあり、こちらは小数点以下の数値も格納することが出来ます。浮動小数点型でよく使うものは「double」があります。
整数型に小数の値を格納してしまうと、小数以下の値が切り捨てられてしまいます。その時々に応じて適切な変数の型宣言が必要になってくるというわけです。
整数型について簡単に理解出来たところで、int型の概要を見ていきましょう。
int型は整数型の代表格
intは整数型の代表格で、非常によく使われます。整数型に属しているので、整数しか格納することができません。
どうしてintがよく使われるの?
と思ってしまいますよね。
実はint型が数値型の中で最も機械に合った型なので、処理が速いという特徴があるんです。そのため、一番よく使われる型になっています。
小さいシステムなら処理の速度を気にすることがないかもしれませんが、大きなシステムでは少しの遅延が重なれば大きな遅延になります。練習の時から、格納する値に合った型を宣言する癖を付けていきましょう。
次に、int型に格納できる値の範囲について解説します。
int型に格納できる最大値、最小値
どの型もそうですが、格納できる値には範囲があります。格納する予定の値が収まるかどうかもチェックしながらプログラミングする必要があるので、よく使う型は何となくでいいので把握しておくことをお勧めします。
int型に格納できる値の範囲 | |
最小値 | -2,147,483,648 |
最大値 | 2,147,483,647 |
これよりも小さい値・大きい値を格納することはできません。足りない、ということであれば、この後紹介する「long」を使ってみましょう。
次に、int型で変数を宣言する時の書き方を解説します。
int型変数の宣言方法
int型での宣言方法はとても簡単です。
int testInt1; int testInt2 = 12345;
変数名の前に「int」と付けることでint型の変数を宣言することが出来ます。同時に値も格納したい時には2行目のように書きましょう。
次の章では、int型変数でありがちなエラーを筆者の経験から紹介していきます。int型変数を宣言してプログラミングしたけど上手くできない……という方は次の章も続けてご覧ください。
int型変数でよくありがちなエラー
この章では、ありがちなエラーと対処法について紹介していきます。
桁あふれ
非常によくやってしまうのが桁あふれ(オーバーフロー)です。
筆者も、「まあ大きな数値が入るだろうけどint型に収まるだろう」と(適当に)判断して、桁あふれのエラーを出してしまうことがあります…
試しに桁あふれのエラーを出してみます。
フォームで数値を入力してボタンを押すとメッセージボックスが出るものを作ってみました。フォームで入力された値は、中でint型に格納しています。
テキストボックスに制限をかけていないので、intの範囲外になる数値を入力してボタンを押してみます。
そうすると、OverflowExceptionが表示されました。これが桁あふれのエラーです。
皆さんはそんなことが起こらないよう、事前にどんな数値が入るか確かめてから型を宣言しましょう。
しかし、気を付けていても桁あふれが起こってしまうことがあります。そんな時はどうしたらよいのでしょうか?
解決法:型を変える
あらかじめintに格納できそうにない小さい・大きい数値が入ってきそうという時にはintではなくlongで変数を宣言しておきましょう。
longについては後ほど解説していきます。
型の不一致
もう一つは型の不一致です。これは、動かす前からエラーの表示をされることが多いので分かりやすいですよね。
先ほど書いたコードでエラーを起こしてみます。
数値型に文字列を格納しようとしたため、エラーになりました。
また、数値型同士(例えばintとlong)でも同じ型以外はエラーになるので注意です。
解決法:型変換を使う
先ほど書いたコードのように「どうしてもintの変数にstringの変数の値を入れたいんだ……」という時もあります。
そんな時は型を変換するという技を使いましょう。
文字列でも数値に変換できる場合は、型変換を使うことが出来ます。ただし、数値に変換できない値の場合、intに格納できる範囲外の値の場合はエラーが出てしまうので注意も必要な技です。
型変換については、後ほど詳しく紹介します。
int型以外のよく使う数値型
この章ではint型以外でよく使う・目にする数値型を紹介していきます。もっと大きい・小さい値を扱いたい、小数を扱いたい時には次の型を使ってみましょう。
intより範囲が広い「long型」
long型はintよりも広い範囲の値を格納することが出来ます。
long型に格納できる範囲 | |
最小値 | -9,223,372,036,854,775,808 |
最大値 | 9,223,372,036,854,775,807 |
intよりも非常に広い範囲の値なのがわかりますね。
もし、扱う数値がintより小さい・大きい場合にはlongを使って変数を宣言しましょう。
小数も格納したい時は「double型」
int型では扱うことのできない小数を格納したい場合にはdouble型を使います。
ですが、小数計算をdouble型変数で行うと、値を丸める関係で微妙なずれが生じます。小数を使った計算結果に許容範囲がある、単に小数を格納したい時にはdouble型で問題ありません。
もし、正確な計算で小数を扱いたい場合は次に紹介する「decimal型」を使いましょう。
正確な小数計算をしたい時は「decimal型」
decimal型はdouble型と違い、正確な小数計算が行えます。
お金に関する計算をシステムで行うなど、小数以下も正確に計算したいときにはdecimalを使用しましょう。
ただし、decimalは処理速度などに影響がでますので多用はお勧めしません。精度の高い計算がしたい時だけ使用するようにしましょう。
次に、型変換について紹介します。
int型の変換について
intに文字列を格納したいなどの時には型変換を利用します。
型変換の際にはintに格納できる値が確実に入ってくるようプログラミングする必要があります。もし、数値にならないような文字列(例えば、12aなど)をそのままintに変換しようとすればエラーになるので注意しましょう。
型変換にはParseメソッドを使います。型変換が成功するかどうか判断したい時には「TryParse」というメソッドも用意されているので、チェックの結果次第では変換処理をしないなどの条件分岐に使用できます。
Parse、TryParseメソッドの使い方は次の記事で詳しく解説していますのでこちらをご確認ください。
まとめ
C#のint型の概要を解説しました。
非常によく使う型なので、早めに慣れて使いこなせるようになりましょう。
それでは次の解説で!