Error in Calculus

Asked

Viewed 140 times

0

I have a problem with the conversion of String for double. As you can see in the code, my if for in the variable latas and difvalor because you’re making the mistake:

A value of type 'double' can’t be Assigned to a variable of type 'int'. Try Changing the type of the variable, or casting the right-hand type to 'int'.

How can I fix this conversion problem?

Follows the code

Future calculate() {
var totp1 =  double.parse(_precoCtrl.text.replaceAll(new RegExp(r'[,.]'), '',)) * 12;
var totp2 = double.parse(_precoCtrl1.text.replaceAll(new RegExp(r'[,.]'), '',))* 12;
var totmlp1 = int.parse(_unitCtrl.text.replaceAll(new RegExp(r'[,.]'), '',)) * 12;
var totmlp2 = int.parse(_unitCtrl1.text.replaceAll(new RegExp(r'[,.]'), '',)) * 12;
var difvalor = 0;
var latas = 0;
var litros = 0;
var totlitros = 0;
var diflitros = 0;
var precounit1 = int.parse(_precoCtrl.text.replaceAll(new RegExp(r'[,.]'), '',));
var precounit2 = int.parse(_precoCtrl1.text.replaceAll(new RegExp(r'[,.]'), '',));
var precoml1 = int.parse(_unitCtrl.text.replaceAll(new RegExp(r'[,.]'), '',));
var precoml2 = int.parse(_unitCtrl1.text.replaceAll(new RegExp(r'[,.]'), '',));

//totp1 = double.parse(_precoCtrl.text.replaceAll(new RegExp(r'[,.]'), '',)) * 12 as int;
//totp2 = double.parse(_precoCtrl1.text.replaceAll(new RegExp(r'[,.]'), '',))* 12 as int;
//totmlp1 = double.parse(_unitCtrl.text.replaceAll(new RegExp(r'[,.]'), '',)) * 12 as int;
//totmlp2 = double.parse(_unitCtrl1.text.replaceAll(new RegExp(r'[,.]'), '',)) * 12 as int;

setState(() {
  _completed = false;
  _busy = true;
});

return new Future.delayed(const Duration(seconds: 1), ()  {
  setState(
    () {
      if (totp1 > totp2) {
        difvalor = (totp1 - totp2);
        latas = difvalor / precoml2;
        litros = latas * double.parse(_unitCtrl.text) as int;
        totlitros = litros + totmlp1;
        diflitros = totlitros - totmlp1;

        if (diflitros > 0) {
        _resultText1 = 'Produto 2';
        _resultText =
            ('Comprando mais '+ latas.toStringAsFixed(0) +
                    ' unidades do Produto 2, sairá o mesmo preço que o Produto 1. Porém levando o Produto 2 você vai ganhar ' +
               diflitros.toStringAsFixed(0) +
                ' ml a mais!');
      } else if (diflitros < 0)
        _resultText = 'Pelo mesmo preço você leva ' + latas.toStringAsFixed(0)+
            ' unidades do Produto 1. Porém levando o Produto 2, você ganhará '+diflitros.toStringAsFixed(0)+' ml a mais!';
      else if (diflitros == 0) {
      _resultText1 = 'Produto 2';
        _resultText =
            'Levando '+ latas.toStringAsFixed(0)+' do Produto 2, fica o mesmo preço que levar a Produto 1 e não há nenhuma diferença de ML';
      }
      } else {
        difvalor = (totp2 - totp1);
        latas = (difvalor / double.parse(_precoCtrl.text)) as int;
        litros = latas * double.parse(_unitCtrl1.text) as int;
        totlitros = litros + totmlp2;
        diflitros = totlitros - totmlp1;
      }

        if (diflitros > 0) {
      _resultText1 = 'Produto 1';
      _resultText =
            ('Comprando mais '+ latas.toStringAsFixed(0) +
                    ' unidades do Produto 1, sairá o mesmo preço que a Produto 2. Porém levando o Produto 1 você vai ganhar ' +
                    diflitros.toStringAsFixed(0) +
                    ' ml a mais!');
                    _resultText1 = 'Produto 1';
          } else if (diflitros < 0)
            _resultText = 'Pelo mesmo preço você leva ' + latas.toStringAsFixed(0)+
                ' unidades do Produto 2. Porém levando o Produto 1, você ganhará '+diflitros.toStringAsFixed(0)+' ml a mais!';
          else if (diflitros == 0) {
            _resultText1 = 'Produto 1';
            _resultText =
                'Levando '+ latas.toStringAsFixed(0)+' unidades do Produto 1, fica o mesmo preço que levar o Produto 2 e não há nenhuma diferença de ML';
          }

          _busy = false;
          _completed = true;
        },
    );
    });
  }

1 answer

1


Incorrect type conversion. In your case you are trying to enter type value double in a variable of type int and this is not possible by the typing rules of dart.

In the declaration of your variables you left for the dart dynamically infer the type when using the var and when began with 0 these variables were determined by the language they are of type int.

To solve can initialize these variables with 0.0 or you can replace the var for double.

// Solução 1
var difvalor = 0.0;
var latas = 0.0;

// Solução 2
double difvalor = 0;
double latas = 0;

Could not run the example on Dartpad, but summarizing the scenario with the available code was the analysis I got of the error.

  • Good guy! Thanks for your help.

  • 1

    Dispose. If the answer has solved the problem I recommend to signal as accepted.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.