一元N次方程,转为字符串在oracle用power函数计算

15 篇文章 1 订阅
9 篇文章 0 订阅

这几天做任务的时候有个需求,从数据库读取出公式,现在要用这个计算公式

Y=0.004x^11 - 0.265*x^6 + 0.382x^2 + 10.46x - 4.772  计算出Y值,

 

下面介绍一种比较取巧的方法,适用于有oracle数据库的:

思路:  

1.Oracle有一个自带的函数power(n,m);  n的m次方,用power来替换 "^" 最后拼接成适用于oracle的字符串使用

2.转换为的字符串为:0.004*power(12.5,11)-0.265*power(12.5, 6)+0.382*power(12.5, 2)+10.46*12.5-4.772

3.带入oracle查询就可以得出我们要的值:

 

 

下面写成了一个适用于一元n次行数通用的方法:

 

/**
 * Created with IntelliJ IDEA
 * Date:    2016/12/28
 * Time:    下午2:34
 */

public class Review_7_yicihanshu {
    public static void main(String[] args){
        double paramValue = 12.5;
        String formula = "0.004x^11 - 0.265*x^6 + 0.382x^2 + 10.46x - 4.772";
        Review_7_yicihanshu review_7_yicihangshu = new Review_7_yicihanshu();
        String str = review_7_yicihangshu.getFormula(formula);
        str = str.replaceAll("x",paramValue+"");
        System.out.println(str);
    }

    public String getFormula(String formula){
        String str = "";
        formula = formula.replaceAll("\\s","").replaceAll("\\*","");//去掉空格和计算公式中的*
        String flag = formula;
        flag = flag.replace("+","-");
        String[] str2 = flag.split("-");//按"-"号分割
        int count = -1;//记录当前运算符
        for(int i = 0 ; i < str2.length ; i++){
            count += str2[i].length()+1;//记录当前运算符在原来字符串中的位置
            str2[i] = str2[i].replaceAll("x","*x");
            String ysf = i==str2.length-1 ? "" : formula.substring(count, count+1); //运算符
            if (str2[i].indexOf("^")==-1) {
                str += i==str2.length-1 ? str2[i] : str2[i]+ysf;
            } else {
                str2[i] = str2[i].replaceAll("x\\^","power(x, ");
                str += i==str2.length-1 ? str2[i]+")" : str2[i]+")"+ysf;
            }
        }
        return str;
    }
}

运行结果:

 


 

运行结果的就是我们想要的字符串,最后带入数据库查询,就可以了

希望对大家有所帮助.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值