Dartで文字列(String)を数値(int・double)に変換する方法についてまとめています。
Flutterでユーザー入力を受け取ったり、APIレスポンスを処理したりする場面でよく使うので、一度確認しておくと良いかと思います。
この記事では以下の内容を扱っています。
int.parse()で文字列をintに変換する方法double.parse()で文字列をdoubleに変換する方法int.tryParse()/double.tryParse()でnull安全に変換する方法- 変換に失敗したときの挙動と対処法
※ 載せているコードはFlutter 3.29.3 / Dart 3.7.2で動作を確認しています。
int.parseで変換する
文字列をint(整数)に変換するには、int.parse()を使うことができます。
void main() {
String str = '42';
int num = int.parse(str);
print(num); // 42
print(num + 8); // 50
print(num.runtimeType); // int
}
int.parse()に文字列を渡すと、整数のint型として返ってきます。
確認すると、num + 8 の演算も問題なくできているのがわかります。
また、runtimeTypeを使うと、型もint型に変換されていることが確認できました。
実行結果:
42
50
int
数値として扱えているので、そのまま計算にも使えます。
double.parseで変換する
文字列をdouble(小数)に変換するには、double.parse() を使うことができます。
void main() {
String str = '3.14';
double num = double.parse(str);
print(num); // 3.14
print(num * 2); // 6.28
print(num.runtimeType); // double
}
double.parse() に小数を含む文字列を渡すと、double型として返ってきます。
確認すると、num * 2 の計算もきちんと小数で返ってきているのがわかります。
実行結果:
3.14
6.28
整数の文字列('42' など)を double.parse() に渡しても、42.0 として変換されます。
int.tryParseの使い方(null safety)
int.parse()は変換に失敗すると例外(FormatException)を投げます。
変換できるかどうか不確かな場合には、int.tryParse() を使うと良いかと思います。
void main() {
String validStr = '100';
String invalidStr = 'abc';
int? num1 = int.tryParse(validStr);
int? num2 = int.tryParse(invalidStr);
print(num1); // 100
print(num2); // null
}
int.tryParse()は変換に失敗したときに例外を投げず、null を返します。
戻り値の型が int?(nullable)になっているので、nullチェックをしながら安全に使えます。
実行結果:
100
null
Flutterのテキストフォームで入力値を受け取るときなど
ユーザーが数値以外を入力する可能性がある場面では tryParse() を使うのが無難かと思います。
double.tryParseの使い方(null safety)
double.parse()の安全版として、double.tryParse()も用意されています。
void main() {
String validStr = '2.718';
String invalidStr = 'hello';
double? num1 = double.tryParse(validStr);
double? num2 = double.tryParse(invalidStr);
print(num1); // 2.718
print(num2); // null
}
double.tryParse()も同様に、変換できない文字列を渡すと null が返ってきます。
if (num1 != null) などで null チェックしてから使う形になります。
実行結果:
2.718
null
変換に失敗したときの挙動
parse() と tryParse() の挙動の違いを整理しておきます。
| メソッド | 変換成功 | 変換失敗 |
|---|---|---|
int.parse() |
int を返す | FormatException を投げる |
int.tryParse() |
int を返す | null を返す |
double.parse() |
double を返す | FormatException を投げる |
double.tryParse() |
double を返す | null を返す |
parse() を使う場合は、try-catch で例外を受け取るようにしておくと安全です。
void main() {
try {
int num = int.parse('abc');
print(num);
} catch (e) {
print('変換に失敗しました: $e');
}
}
catch ブロックで FormatException を受け取っています。
アプリがクラッシュしないように、parse() を使う場合は必ず try-catch をセットにするか、tryParse() を使うようにしましょう。
ちなみに、このコードでは変換に失敗するため、FormatExceptionが投げられて結果は下記のようになります。
実行結果:
変換に失敗しました: FormatException: Invalid radix-10 number (at character 1)
abc
^
まとめ
Dartで文字列を数値に変換する方法についてまとめてみました。
- 確実に数値の文字列を扱う場合は
int.parse()/double.parse() - ユーザー入力など変換が不確かな場合は
int.tryParse()/double.tryParse()
Flutter開発では tryParse() を使う場面のほうが多いかと思います。
nullにも対応しているので、積極的に使っていくと良いですね。

コメント