flutter - dart中字符串的数学表达式

标签 flutter dart

这是我用来将字符串分隔成变量和运算符的代码。这样他们就可以进行手术了。

字符串表达式 = "1567x356-234+908/56x12"; int lastPos = 0;

  List<double> exprVar = new List<double>();
  List<String> operator = new List<String>();

  for (int i =0; i < expression.length; i++) {

      if (expression[i] == "+" || expression[i] == "-" || expression[i] == "/" || expression[i] == "x") {

        operator.add(expression[i]);

        exprVar.add(double.parse(expression.substring(lastPos, i)));
        lastPos = i+1;
      }

    if (i == expression.length - 1) {
        exprVar.add(double.parse(expression.substring(lastPos, i+1)));
      }

  }

  print("The Numbers are is: $exprVar");
  print("The operators are: $operator");

我有两个问题:

  1. 我是在重新发明轮子吗?有没有String库函数 在 Dart 中,我不知道这可能会使这段代码更 方便的?

  2. 现在我有了数字和运算符,我是否必须 编写代码来确定运算符的优先顺序,或者可以 我做了一个巨大的单行表达式,处理器会解决 是给我的吗?

最佳答案

使用函数树
请参阅文档 https://pub.dev/packages/function_tree#-installing-tab-

final expressionsExample = [
   '2 + 2 - 2 - 2',
   '(3 + 2)^3',
   '3 * pi / 4',
   '3 * sin(5 * pi / 6)',
   'e^(-1)'
 ];
 for (final expression in expressionsExample) {
   print("'$expression' -> ${expression.interpret()}");
 }

输出将是

'2 + 2 - 2 - 2' -> 0
'(3 + 2)^3' -> 125
'3 * pi / 4' -> 2.356194490192345
'3 * sin(5 * pi / 6)' -> 1.5000000000000009
'e^(-1)' -> 0.36787944117144233

关于flutter - dart中字符串的数学表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61861550/

相关文章:

dart - 如何在 Flutter 中链接文本

dart - 将 SliverFillRemaining 与 CustomScrollView 和 SliverList 一起使用

dart - 如何装饰Image.file

dart - 响应不是一种类型,无法并且期望找到 ';'

function - 是否可以重写 Dart 中的顶级函数?

Flutter `showModalBottomSheet` Ticker 在测试期间没有被处理

flutter - showModalBottomSheet和边框半径

flutter - setter/getter 导致最大调用堆栈大小超出抖动

ios - 在 flutter 项目中编写 ios native swift 代码时,Xcode 给出错误值类型 'FlutterViewController' 没有成员 'binaryMessenger'

firebase - 如何在flutter中将数据从CSV文件导入数据库