Dartで文字列を数値に変換する方法!(int, double)【Flutter対応】

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にも対応しているので、積極的に使っていくと良いですね。

コメント