我在我的应用中有这个;
Calculable result= new ExpressionBuilder(s1).build();
size.setText(Double.toString(result.calculate()));
size_num = result.calculate();
如果我在S1中输入100 * .25,它会给我一个例外。没有小数,没关系。是否存在EXP4J可以处理小数的变通方法?
另外,如果我在我的等式之后输入一个标签,EXP4J似乎无法处理。在调用EXP4J之前,有没有人知道如何处理方程式中的选项卡?
谢谢!
答案 0 :(得分:2)
不是那些小数。
查看the source of the tokenizer:
// ... snip ...
for (int i = 0; i < chars.length; i++) {
// ... snip ...
if (Character.isDigit(c)) { // matches digit
// ... snip ...
while (chars.length > i + numberLen) {
if (isDigitOrDecimalSeparator(chars[i + numberLen])) { // matches '.'
// ... snip ...
您可以看到,只有在令牌中匹配小数点分隔符时,才会首先匹配数字。
所以我怀疑这会很好:"100*0.25"
,但不是"100*.25"
。
另外,如果我在我的等式之后输入一个标签,EXP4J似乎无法处理。有没有人知道如何在调用EXP4J之前处理方程式中的选项卡?
tokenizer会忽略空格,所以要么在解析之前用空格替换制表符,要么一起删除制表符应该可以解决问题:
s1 = s1.replace("\t", "");
Calculable result= new ExpressionBuilder(s1).build();