You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Java图形界面计算器添加百分比表达式计算功能?

如何修改Java计算器代码支持百分比(%)运算

要实现5*2%这类含百分比符号的表达式求值,核心是把数字后的%解析为该数字除以100(比如2%等价于0.02),只需修改parseFactor()方法即可,具体如下:

修改逻辑

在解析完数字的代码后,增加对%后缀的判断:如果当前字符是%,就将解析出的数值除以100,同时跳过该符号。

修改后的完整代码

// Esto es de StackOverflow, solo que quitando cosas que no se usaban
public double calcular() {

    // Obtener la expresión matemática como una cadena
    String str = this.out.getText();

    // Crear un nuevo objeto anónimo para evaluar la expresión
    return new Object() {
        int pos = -1, ch;

        // Método para obtener el siguiente caracter de la cadena
        void nextChar() {
            ch = (++pos < str.length()) ? str.charAt(pos) : -1;
        }

        // Método para verificar si el caracter actual coincide con el pasado por
        // parámetro
        boolean eat(int charToEat) {
            while (ch == ' ')
                nextChar();
            if (ch == charToEat) {
                nextChar();
                return true;
            }
            return false;
        }

        // Método principal para evaluar la expresión
        double parse() {
            nextChar();
            double x = parseExpression();
            if (pos < str.length())
                throw new RuntimeException("No esperado: " + (char) ch);
            return x;
        }

        // Método para evaluar la expresión
        double parseExpression() {
            double x = parseTerm();
            for (;;) {
                if (eat('+'))
                    x += parseTerm(); // suma
                else if (eat('-'))
                    x -= parseTerm(); // resta
                else
                    return x;
            }
        }

        // Método para evaluar los términos
        double parseTerm() {
            double x = parseFactor();
            for (;;) {
                if (eat('*'))
                    x *= parseFactor(); // multiplicación
                else if (eat('/'))
                    x /= parseFactor(); // división
                else
                    return x;
            }
        }

        // Método para evaluar los factores(已修改支持%)
        double parseFactor() {
            double x;
            int startPos = this.pos;
            if (eat('+'))
                return +parseFactor(); // más unario
            if (eat('-'))
                return -parseFactor(); // menos unario
            while ((ch >= '0' && ch <= '9') || ch == '.')
                nextChar();
            x = Double.parseDouble(str.substring(startPos, this.pos));
            
            // 新增:处理百分比符号
            if (eat('%')) {
                x /= 100;
            }
            
            return x;
        }
    }.parse();
}

验证示例

  • 输入5*2%,计算结果为0.1(即5 * (2/100))
  • 输入3+5%,计算结果为3.05(即3 + (5/100))
  • 输入100%,计算结果为1.0

内容的提问来源于stack exchange,提问作者user15558580

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 23:02:21