gpt4 book ai didi

java - 如何格式化文本字段内的数学表达式?

转载 作者:行者123 更新时间:2023-12-02 09:18:30 25 4
gpt4 key购买 nike

我正在创建一个计算器软件。在我输入的文本字段中,整个表达式显示为一个字符串(我想保持这种方式)。这是一个演示:

<小时/>

enter image description here

<小时/>

我希望它的格式如下:

  • 数字 - ###.###.###,######(将它们分为 3 位数字组,仅在需要时显示分数,且最多只能显示 6 位数字。 )
  • 运算符和括号 - ###×(###-###)/###(不应导致任何格式错误或问题。我不在乎是否存在或数字和运算符/括号之间没有空格。)

以下是正确格式的上述示例:

1.000×(5-3)/2

我还希望它在我输入时自动更新格式

<小时/>

到目前为止,我尝试将 JFormattedTextFieldMaskFormattersNumberFormat 一起使用,但它们都没有按照我想要的方式工作(如上所述)。

数字格式版本。

public class Frame {
private NumberFormat numberFormat = NumberFormat.getInstance();
private JFormattedTextField textField = new JFormattedTextField(numberFormat);
}

MaskFormatter 版本。

public class Frame {
private MaskFormatter maskFormat;
private JFormattedTextField textField;
public Frame() {
try {
maskFormat = new MaskFormatter("###.###.###,######");
} catch (ParseException e) {
e.printStackTrace();
}
textField = new JFormattedTextField(maskFormat);
}
}
<小时/>

我设法使用 DecimalFormat 格式化结果,但我不想只格式化结果。

格式化结果。

DecimalFormat resultFormat = new DecimalFormat("###,###,###.######");
String result = resultFormat.format(Parser.evaluate(expression));
textField.setText(result);

当我计算 5/3 时,结果是:

enter image description here

正如我所愿。

<小时/>

抱歉,这篇文章如此详细而长,非常感谢您的帮助!

最佳答案

试试这个。

DecimalFormat resultFormat = new DecimalFormat("###,###,###.######");
Pattern numberPattern = Pattern.compile("\\d+(\\.\\d+)?");

String s = "1000×(5-3)/2";
Matcher m = numberPattern.matcher(s);
StringBuffer sb = new StringBuffer();
while (m.find()) {
double value = Double.parseDouble(m.group());
String formatted = resultFormat.format(value);
m.appendReplacement(sb, formatted);
}
m.appendTail(sb);
System.out.println(sb);
// -> 1,000×(5-3)/2

关于java - 如何格式化文本字段内的数学表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35818540/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com