317

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

1

13 Answers 13

489

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.

Sign up to request clarification or add additional context in comments.

2 Comments

How should you parse an integer from a string that contains invalid characters later on? E.g., "-01:00", where I want to get -1, or "172 apples" where I would expect to get 172. In JavaScript parseInt("-01:00") works just fine but Dart gives an error. Is there any easy way without checking manually character-by-character? Thanks.
int.tryParse(value) is also a good option
161

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; 

1 Comment

This is not working fpr number with texts ex: "323pm32"
69
+200

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

Comments

17

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 ... // } 

1 Comment

I think this answer is helpful & upvote. tryParse should be used to check null :D
16
 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

2 Comments

int.parse() and double.parse() can throw an error when it couldn't parse the String. Please elaborate on your answer so that others can learn and understand dart better.
Thank-you for mentioning it josxha, I am an absolute beginner in Dart and I'm trying my best to help others, Well I thought it would be the simplest answer, anyway Thanks!!
13

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.

1 Comment

This is the answer. THank you
12
void main(){ String myString ='111'; int data = int.parse(myString); print(data); } 

Comments

8

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

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

Comments

6

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)

Comments

2

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); } 

Comments

1

for easy reading, you can make it an extension

extension MyCustomString on String { double? get strToDouble { double? d = double.tryParse(replaceAll(RegExp(r'[^0-9\.]'), '')); return d; } int? get strToInt { int? i = int.tryParse(replaceAll(RegExp(r'[^0-9]'), '')); return i; } } void main() { var myString = '13.2'; var myDouble = myString.strToDouble; print(myDouble); print(myDouble.runtimeType); myString = '13'; var myInt = myString.strToInt; print(myInt); print(myInt.runtimeType); } 

https://dartpad.dev/49bde0c1ed780decc902f3d4d06d8f0c?

Comments

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

Comments

0

If the default value is 0 you can use something like double.parse("0${textfieldController.value.text}"); adding a zero before the string you are trying to parse ensuring that no exceptions are raised even when the input is empty or cannot be successfully converted into a numeric value.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.