Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Invalid double

Quando tento executar o código, é exibido o seguinte erro:

Building package executable... 
Built calculadora:calculadora.
10
10
+
Unhandled exception:
FormatException: Invalid double
+0
#0      double.parse (dart:core-patch/double_patch.dart:112:7)
#1      main (file:///C:/Users/Linhares/Documents/pessoal/TI/dart_flutter/calculadora-Aula2/bin/calculadora.dart:4:28)
#2      _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:315:19)
#3      _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:194:12)

Estou utilizando a versão dart 3.7.2

3 respostas

Olá, Ricardo, como vai?

Esse erro acontece quando o Dart tenta converter uma entrada em número, mas o valor recebido não é compatível com double.parse(). Pela mensagem de erro, o símbolo + está sendo lido como entrada e o programa tenta interpretá-lo como número.

Para entender melhor, seria importante ver como você está capturando os valores e em que momento o operador é digitado.

Pode compartilhar o código do seu projeto? Assim consigo analisar a lógica e apontar ajustes mais assertivos.

Fico no aguardo e a disposição :)

O código que estou tentando executar é o da aula:

import 'dart:io';

void main() {
 double numeroUm = double.parse(stdin.readLineSync()!);
  double numeroDois = double.parse(stdin.readLineSync()!);
  String operacao = stdin.readLineSync()!;
  
  void soma() {
    print(numeroUm + numeroDois);
  }
  }

Alguns valores passam, porém, quando tento somar 10 + 10, o erro aparece.

solução!

Oi, Ricardo.

Seu código está correto, tem algum outro trecho que utilize a variável operacao? Se não tiver, vamos tentar mudar um pouco a abordagem, tente o código da seguinte forma:

import 'dart:io';

void main() {
  String entrada = stdin.readLineSync()!;
  var partes = entrada.split(' ');

  double numeroUm = double.parse(partes[0]);
  String operacao = partes[1];
  double numeroDois = double.parse(partes[2]);

  void soma() {
    print(numeroUm + numeroDois);
  }

  if (operacao == '+') {
    soma();
  }
}

Para esse caso, você precisa digitar toda a operação em uma mesma linha, por exemplo 10 + 10 (deve ter um espaço entre os números e o operador). Aqui vamos receber um texto em uma única variável e dividi-lo em três partes diferentes.

Fico no aguardo e a disposição :)