Jak przetworzyć ciąg na liczbę za pomocą Dart?


115

Chciałbym przeanalizować ciągi, takie jak „1” lub „32,23”, na liczby całkowite i podwójne. Jak mogę to zrobić z Dart?


oprócz poniższych odpowiedzi, jeśli Twój ciąg zawiera litery, możesz to zrobić w ten sposób: stackoverflow.com/a/61401948/614026
temirbek

Odpowiedzi:


188

Możesz przeanalizować ciąg do liczby całkowitej za pomocą int.parse(). Na przykład:

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

Zauważ, że int.parse()akceptuje 0xciągi z prefiksem. W przeciwnym razie wejście jest traktowane jako podstawa-10.

Możesz przetworzyć ciąg na podwójny za pomocą double.parse(). Na przykład:

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

parse() zgłosi FormatException, jeśli nie może przeanalizować danych wejściowych.


Jak później przeanalizować liczbę całkowitą z ciągu zawierającego nieprawidłowe znaki? Np. „-01: 00”, gdzie chcę uzyskać -1, lub „172 jabłka”, gdzie spodziewałbym się 172. W JavaScript parseInt („- 01:00”) działa dobrze, ale Dart wyświetla błąd. Czy jest jakiś łatwy sposób bez ręcznego sprawdzania znak po znaku? Dzięki.
user1596274

88

W Dart 2 dostępny jest int.tryParse .

Zwraca null dla nieprawidłowych danych wejściowych zamiast rzucania. Możesz go używać w ten sposób:

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

7
 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 () i double.parse () mogą zgłosić błąd, gdy nie można przeanalizować ciągu


2
int.parse()i double.parse()może zgłosić błąd, gdy nie może przeanalizować ciągu. Opisz swoją odpowiedź, aby inni mogli lepiej się uczyć i rozumieć rzutki.
josxha

1
Dziękuję za wspomnienie o tym josxha, jestem absolutnym początkującym w Dart i staram się jak najlepiej pomagać innym. Cóż, pomyślałem, że to najprostsza odpowiedź, tak czy owak Dzięki !!
Rajdeep12345678910

4

Zgodnie z rzutką 2.6

Opcjonalny onErrorparametr int.parsejest przestarzały . Dlatego powinieneś int.tryParsezamiast tego użyć .

Uwaga : to samo dotyczy double.parse. Dlatego użyj double.tryParsezamiast tego.

  /**
   * ...
   *
   * 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)});

Różnica polega na tym, że int.tryParsezwraca, nulljeśli ciąg źródłowy jest nieprawidłowy.

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

Tak więc w Twoim przypadku powinno to wyglądać tak:

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

4

możesz analizować ciąg za pomocą int.parse('your string value');.

Przykład:- int num = int.parse('110011'); print(num); // prints 110011 ;

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.