How do I parse a string into a number with Dart?

StringParsingDart

String Problem Overview


I would like to parse strings like 1 or 32.23 into integers and doubles. How can I do this with Dart?

String Solutions


Solution 1 - String

You can parse a string into an integer with int.parse(). For example:

var myInt = int.parse('12345');
assert(myInt is int);
print(myInt); // 12345

Note that int.parse() accepts 0x prefixed strings. Otherwise the input is treated as base-10.

You can parse a string into a double with double.parse(). For example:

var myDouble = double.parse('123.45');
assert(myDouble is double);
print(myDouble); // 123.45

parse() will throw FormatException if it cannot parse the input.

Solution 2 - String

In Dart 2 int.tryParse is available.

It returns null for invalid inputs instead of throwing. You can use it like this:

int val = int.tryParse(text) ?? defaultValue;

Solution 3 - String

Convert String to Int
var myInt = int.parse('12345');
assert(myInt is int);
print(myInt); // 12345
print(myInt.runtimeType);
Convert String to Double
var myDouble = double.parse('123.45');
assert(myInt is double);
print(myDouble); // 123.45
print(myDouble.runtimeType);
Example in DartPad

screenshot of dartpad

Solution 4 - String

 void main(){
  var x = "4";
  int number = int.parse(x);//STRING to INT

  var y = "4.6";
  double doubleNum = double.parse(y);//STRING to DOUBLE

  var z = 55;
  String myStr = z.toString();//INT to STRING
}

> int.parse() and double.parse() can throw an error when it couldn't parse the String

Solution 5 - String

As per dart 2.6

The optional onError parameter of int.parse is deprecated. Therefore, you should use int.tryParse instead.

Note: The same applies to double.parse. Therefore, use double.tryParse instead.

  /**
   * ...
   *
   * The [onError] parameter is deprecated and will be removed.
   * Instead of `int.parse(string, onError: (string) => ...)`,
   * you should use `int.tryParse(string) ?? (...)`.
   *
   * ...
   */
  external static int parse(String source, {int radix, @deprecated int onError(String source)});

The difference is that int.tryParse returns null if the source string is invalid.

  /**
   * Parse [source] as a, possibly signed, integer literal and return its value.
   *
   * Like [parse] except that this function returns `null` where a
   * similar call to [parse] would throw a [FormatException],
   * and the [source] must still not be `null`.
   */
  external static int tryParse(String source, {int radix});

So, in your case it should look like:

// Valid source value
int parsedValue1 = int.tryParse('12345');
print(parsedValue1); // 12345
  
// Error handling
int parsedValue2 = int.tryParse('');
if (parsedValue2 == null) {
  print(parsedValue2); // null
  //
  // handle the error here ...
  //
}

Solution 6 - String

Above solutions will not work for String like:

String str = '123 km';

So, the answer in a single line, that works in every situation for me will be:

int r = int.tryParse(str.replaceAll(RegExp(r'[^0-9]'), '')) ?? defaultValue;
or
int? r = int.tryParse(str.replaceAll(RegExp(r'[^0-9]'), ''));

But be warned that it will not work for the below kind of string

String problemString = 'I am a fraction 123.45';
String moreProblem = '20 and 30 is friend';

If you want to extract double which will work in every kind then use:

double d = double.tryParse(str.replaceAll(RegExp(r'[^0-9\.]'), '')) ?? defaultValue;
or
double? d = double.tryParse(str.replaceAll(RegExp(r'[^0-9\.]'), ''));

This will work for problemString but not for moreProblem.

Solution 7 - String

you can parse string with int.parse('your string value');.

Example:- int num = int.parse('110011'); print(num); // prints 110011 ;

Solution 8 - String

String age = stdin.readLineSync()!; // first take the input from user in string form
int.parse(age);  // then parse it to integer that's it

Solution 9 - String

You can do this for easy conversion like this

Example Code Here

void main() {
  var myInt = int.parse('12345');
 var number = myInt.toInt();
  print(number); // 12345
  print(number.runtimeType);  // int
  
  
    var myDouble = double.parse('123.45');
  var double_int = myDouble.toDouble();
  print(double_int); // 123.45
   print(double_int.runtimeType);  
}

Solution 10 - String

If you don't know whether your type is string or int you can do like this:

int parseInt(dynamic s){
  if(s.runtimeType==String) return int.parse(s);
  return s as int;
}

For double:

double parseDouble(dynamic s){
  if(s.runtimeType==String) return double.parse(s);
  return s as double;
}

Therefore you can do parseInt('1') or parseInt(1)

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionSeth LaddView Question on Stackoverflow
Solution 1 - StringSeth LaddView Answer on Stackoverflow
Solution 2 - StringkgiannakakisView Answer on Stackoverflow
Solution 3 - StringJaveed IshaqView Answer on Stackoverflow
Solution 4 - StringRajdeep12345678910View Answer on Stackoverflow
Solution 5 - StringIlker CatView Answer on Stackoverflow
Solution 6 - StringZihanView Answer on Stackoverflow
Solution 7 - StringRajni GujaratiView Answer on Stackoverflow
Solution 8 - StringSiraj AhmedView Answer on Stackoverflow
Solution 9 - Stringuser10993979View Answer on Stackoverflow
Solution 10 - StringArfina ArfwaniView Answer on Stackoverflow