Dart:根据用户输入字符串(包括数学运算符)进行计算

Aem*_*mbe 3 string math double dart flutter

我是 Dart 和 Flutter 的新手。有没有一种简单的方法可以将用户输入计算为“3+5/8”等字符串?当然结果应该是double类型。感谢您的回答!

小智 5

如果您正在寻找简单的数学字符串,您可以借助一个名为的包来计算它们

首先安装这个包。将其添加到您的项目中,然后实现此代码。

import 'dart:math';
import 'package:petitparser/petitparser.dart';

Parser buildParser() {
  final builder = ExpressionBuilder();
  builder.group()
    ..primitive((pattern('+-').optional() &
            digit().plus() &
            (char('.') & digit().plus()).optional() &
            (pattern('eE') & pattern('+-').optional() & digit().plus())
                .optional())
        .flatten('number expected')
        .trim()
        .map(num.tryParse))
    ..wrapper(
        char('(').trim(), char(')').trim(), (left, value, right) => value);
  builder.group()..prefix(char('-').trim(), (op, a) => -a);
  builder.group()..right(char('^').trim(), (a, op, b) => pow(a, b));
  builder.group()
    ..left(char('*').trim(), (a, op, b) => a * b)
    ..left(char('/').trim(), (a, op, b) => a / b);
  builder.group()
    ..left(char('+').trim(), (a, op, b) => a + b)
    ..left(char('-').trim(), (a, op, b) => a - b);
  return builder.build().end();
}

double calcString(String text) {
  final parser = buildParser();
  final input = text;
  final result = parser.parse(input);
  if (result.isSuccess)
    return result.value.toDouble();
  else
    return double.parse(text);
}
Run Code Online (Sandbox Code Playgroud)

现在只需调用这个函数calcString,您就会得到所需的答案。请记住,如果给定的字符串有效,它只会返回计算值,否则会抛出错误。