当前位置:首页 » 编程语言 » java数学公式解析

java数学公式解析

发布时间: 2022-08-20 04:35:01

1. java如何如何解析带有变量的公式,急急急

不知道你在给公式赋完变量之后是要做什么,是直接输出公式计算结果呢,还是直接把整个公式打印出来呢。
如果你是想输出计算结果的话,你的所谓的公式应该是写成了一个方法的吧,这样直接把参数传给该方法就可以得到你想要的结果了吧。
如果你是想输出替换变量之后的公式的话,那就用替换做呗,JAVA里面有一个叫MessageFormat的类可以帮你做这个事情。
比方说一个一元一次方程ax=3,a就是你想替换的变量了如果你想把它替换成3,这样的话在java里面可以这么实现
String string = "{0}x=3";
String result = MessageFormat.format(string, "3");
得到的result就是3x=3了。
二元式子的话就这么干啦:
String string = "{0}x+{1}y=3";
String result = MessageFormat.format(string, "3", "3");
结果就是3x+3y=3的啦

2. JAVA 文本表达式解析成数学公式,计算出结果

正则表达分解字符串
然后运算
给你个例子。以前写的,现在忙没空给你写你这个了,public class CalStr { private String src;

/**
* constructor
*
* @param srcthe string(expression) to calculate
*/
public CalStr(String src) {
this.src = src;
}

/**
* calculate to get the result
*
* @return(double)result
*/
public double getResult() {
String postfix = getPostfix();
Stack stk = new Stack();
// System.out.println(postfix);
String parts[] = postfix.split( " + ");
double result = 0;
for (int i = 0; i < parts.length; i++) {
char tmp = parts[i].charAt(0);
if (!isOperator(tmp)) {
stk.push(parts[i]);
} else {
double a = Double.parseDouble((String) stk.pop());
double b = Double.parseDouble((String) stk.pop());
// b is followed by a in the orignal expression
result = calculate(b, a, tmp);
stk.push(String.valueOf(result));
}
}
return result;
}

/**
* test if the character is an operator,such +,-,*,/
*
* @param opthe character to test
* @returntrue if op is an operator otherwise false
*/
private boolean isOperator(char op) {
return (op == '+ ' || op == '- ' || op == '* ' || op == '/ ');
}

/**
* calculate an expression such (a op b)
*
* @param anumber 1
* @param bnumber 2
* @param opthe operator
* @return(double)(a op b)
*/
public double calculate(double a, double b, char op) {
switch (op) {
case '+ ':
return a + b;
case '- ':
return a - b;
case '* ':
return a * b;
case '/ ':
return a / b;
}
return -1;
}

/**
* convert the suffix to postfix
*
* @returnthe postfix as a string
*/
private String getPostfix() {
Stack stk = new Stack();
String postfix = new String();
char op;
int i = 0;
while (i < src.length()) {
if (Character.isDigit(src.charAt(i)) || src.charAt(i) == '. ') {
postfix += " ";
do {
postfix += src.charAt(i++);
} while ((i < src.length())
&& (Character.isDigit(src.charAt(i))));
postfix += " ";
}

else {
switch (op = src.charAt(i++)) {
case '( ':
stk.push( "( ");
break;

case ') ':
while (stk.peek() != "( ") {
String tmp = (String) stk.pop();
postfix += tmp;
if (tmp.length() == 1 && isOperator(tmp.charAt(0)))
postfix += " ";
}
stk.pop();
postfix += " ";
break;

case '+ ':
case '- ':
while ((!stk.empty()) && (stk.peek() != "( ")) {
postfix += stk.pop() + " ";
}
stk.push(String.valueOf(new Character(op)));
break;

case '* ':
case '/ ':
while ((!stk.empty())
&& ((stk.peek() == "* ") || (stk.peek() == "/ "))) {
postfix += stk.pop() + " ";
}
stk.push(String.valueOf(new Character(op)));
break;
}
}
}
ListIterator it = stk.listIterator(stk.size());
while (it.hasPrevious())
postfix += it.previous() + " ";
return postfix.trim().replaceAll( " +\\. ", ". ");
}

/**
* main function
*
* @param args
*/
public static void main(String args[]) {
System.out.println(new CalStr( "((1.5+6.000)*9+9.36)*(8+9-8*8+8*7) ")
.getResult());
}
}

3. java计算简单的数学公式.

publicclassDemo2{
publicstaticvoidmain(String[]args){
doubleprice=100.0;//单价
intnums=200;//数量
doubletotal;//总价
total=price*nums;//计算总价

doubleprofit;//利润
doublecost=12000;//成本
doubletax=0.17;//税率
profit=(total-cost)*(1-tax);//计算利润
System.out.println("利润:"+profit+"元");//输出利润
}
}

运行测试

利润:6640.0元

4. JAVA语言中开方求根等公式方法有总结一块的的没

Java只有开方的方法,没有求根公式

Math.sqrt(16) = 4.0
public static double sqrt(double a)返回正确舍入的 double 值的正平方根。特殊情况是:
如果参数是 NaN 或小于零,那么结果是 NaN。
如果参数是正无穷大,那么结果就是正无穷大。
如果参数是正零或负零,那么结果与参数相同。
否则,结果是最接近该参数值的真实数学平方根的 double 值。

参数:
a - 一个值。
返回:
a 的正平方根。如果参数是 NaN 或小于零,那么结果是 NaN。

5. java语言如何求平方根

使用java.lang.Math类的sqrt(double)方法。 方法详解: public static double sqrt(double a) 返回正确舍入的 double 值的正平方根。

Math是在java.lang这个包中的所以可以直接在程序中用这个Math类直接在程序中这样就可以了:

double n;

n=Math.sqrt(9);//比如9是要平方的数

示例见下图:

(5)java数学公式解析扩展阅读:

平方根计算:

1、功 能: 一个非负实数的平方根

2、函数原型: 在VC6.0中的math.h头文件的函数原型为double sqrt(double);

3、说明:sqrt系Square Root Calculations(平方根计算),通过这种运算可以考验CPU的浮点能力。

6. java问题:需要输入数学函数公式,画出该函数的图像。现求一个公式解析的代码,或已有类库。

我以前给j2me写的一个类,你看下:

用的时候这么用 private BDS bds=BDS.trans("-x+1");
System.out.println(bds.eval(10));
这样的

另外这里面的Hstx.pow和Hstx.ln可以用数学库里的函数替代,因为j2me里没有的

public class BDS{
public int errn=0;
public int len=0;
public int type[]=new int[100];
public double dd[]=new double[100];
public char dc[]=new char[100];
public static BDS trans(String ts){
BDS tr=new BDS();
char s[]=ts.toCharArray(),stk[]=new char[100];
int l=ts.length(),p=0,sl=0;
if(s[0]=='-')s[0]='~';
for(int i=1;i<l;i++)
if(s[i]=='-'&&(s[i-1]<'0'||s[i-1]>'9')&&s[i-1]!='x')s[i]='~';
for(int i=0;i<l;i++){
if(s[i]>='0'&&s[i]<='9'){
double td=s[i]-'0',mt=1.0;
int hp=0;
i++;
while(i<l&&((s[i]>='0'&&s[i]<='9')||s[i]=='.')){
if(s[i]=='.'){
if(hp==1){
tr.errn=1;
return tr;
}
hp=1;
}else{
if(hp==1){
mt/=10.0;
td+=(s[i]-'0')*mt;
}else td=td*10.0+(s[i]-'0');
}
i++;
}
i--;
if(hp==1&&mt==1.0){
tr.errn=1;
return tr;
}
tr.type[p]=1;
tr.dd[p]=td;
p++;
continue;
}
if(s[i]=='x'){
tr.type[p]=3;
p++;
continue;
}
if(s[i]=='a'){
if(i+3>=l||s[i+1]!='b'||s[i+2]!='s'||s[i+3]!='('){
tr.errn=1;
return tr;
}
stk[sl++]='a';
i+=2;
continue;
}
if(s[i]=='i'){
if(i+3>=l||s[i+1]!='n'||s[i+2]!='t'||s[i+3]!='('){
tr.errn=1;
return tr;
}
stk[sl++]='i';
i+=2;
continue;
}
if(s[i]=='l'){
if(i+2>=l||s[i+1]!='n'||s[i+2]!='('){
tr.errn=1;
return tr;
}
stk[sl++]='l';
i++;
continue;
}
if(s[i]=='s'){
if(i+3>=l||s[i+1]!='i'||s[i+2]!='n'||s[i+3]!='('){
if(i+4>=l||s[i+1]!='q'||s[i+2]!='r'||s[i+3]!='t'||s[i+4]!='('){
tr.errn=1;
return tr;
}
stk[sl++]='q';
i+=3;
continue;
}
stk[sl++]='s';
i+=2;
continue;
}
if(s[i]=='c'){
if(i+3>=l||s[i+1]!='o'||s[i+2]!='s'||s[i+3]!='('){
tr.errn=1;
return tr;
}
stk[sl++]='c';
i+=2;
continue;
}
if(s[i]=='t'){
if(i+3>=l||s[i+1]!='a'||s[i+2]!='n'||s[i+3]!='('){
tr.errn=1;
return tr;
}
stk[sl++]='t';
i+=2;
continue;
}
if(s[i]=='~'||s[i]=='('){
stk[sl++]=s[i];
continue;
}
if(s[i]=='+'||s[i]=='-'){
while(sl>0&&stk[sl-1]!='('){
tr.type[p]=2;
tr.dc[p]=stk[--sl];
p++;
}
stk[sl++]=s[i];
continue;
}
if(s[i]=='*'||s[i]=='/'||s[i]=='^'){
while(sl>0&&(stk[sl-1]!='('&&stk[sl-1]!='+'&&stk[sl-1]!='-')){
tr.type[p]=2;
tr.dc[p]=stk[--sl];
p++;
}
stk[sl++]=s[i];
continue;
}
if(s[i]==')'){
while(sl>0&&stk[sl-1]!='('){
tr.type[p]=2;
tr.dc[p]=stk[--sl];
p++;
}
sl--;
if(sl<0){
tr.errn=1;
return tr;
}
continue;
}
tr.errn=1;
return tr;
}
while(sl>0){
if(stk[sl-1]=='('){
tr.errn=1;
return tr;
}
tr.type[p]=2;
tr.dc[p]=stk[--sl];
p++;
}
tr.len=p;
tr.eval(1);
return tr;
}
public double eval(double x){
int sl=0;
double stk[]=new double[100];
for(int i=0;i<len;i++){
if(type[i]==1)stk[sl++]=dd[i];
else if(type[i]==3)stk[sl++]=x;
else{
if(dc[i]=='+'){
if(sl<2){
errn=1;
return 0;
}
stk[sl-2]=stk[sl-2]+stk[sl-1];
sl--;
}
if(dc[i]=='-'){
if(sl<2){
errn=1;
return 0;
}
stk[sl-2]=stk[sl-2]-stk[sl-1];
sl--;
}
if(dc[i]=='*'){
if(sl<2){
errn=1;
return 0;
}
stk[sl-2]=stk[sl-2]*stk[sl-1];
sl--;
}
if(dc[i]=='/'){
if(sl<2){
errn=1;
return 0;
}
stk[sl-2]=stk[sl-2]/stk[sl-1];
sl--;
}
if(dc[i]=='^'){
if(sl<2){
errn=1;
return 0;
}
stk[sl-2]=HstxC.pow(stk[sl-2],stk[sl-1]);
sl--;
}
if(dc[i]=='~'){
if(sl<1){
errn=1;
return 0;
}
stk[sl-1]=-stk[sl-1];
}
if(dc[i]=='a'){
if(sl<1){
errn=1;
return 0;
}
stk[sl-1]=Math.abs(stk[sl-1]);
}
if(dc[i]=='q'){
if(sl<1){
errn=1;
return 0;
}
stk[sl-1]=Math.sqrt(stk[sl-1]);
}
if(dc[i]=='i'){
if(sl<1){
errn=1;
return 0;
}
stk[sl-1]=Math.floor(stk[sl-1]);
}
if(dc[i]=='s'){
if(sl<1){
errn=1;
return 0;
}
stk[sl-1]=Math.sin(stk[sl-1]);
}
if(dc[i]=='c'){
if(sl<1){
errn=1;
return 0;
}
stk[sl-1]=Math.cos(stk[sl-1]);
}
if(dc[i]=='t'){
if(sl<1){
errn=1;
return 0;
}
stk[sl-1]=Math.tan(stk[sl-1]);
}
if(dc[i]=='l'){
if(sl<1){
errn=1;
return 0;
}
stk[sl-1]=HstxC.ln(stk[sl-1]);
}
}
}
if(sl!=1){
errn=1;
return 0;
}
return stk[0];
}
}

7. JAVA计算三角函数公式

已经知道两条边和一个直角了,可以把另一条边求出来(根据A2+B2=C2),然后根据公式
cosA=(a2+b2-c2)/(2ab) 其中A为边a b的夹角!

热点内容
Wcl上传如何选择服务器 发布:2025-01-19 11:17:24 浏览:762
如何编程简单给服务器发一个指令 发布:2025-01-19 11:16:44 浏览:805
python控制台乱码 发布:2025-01-19 10:55:38 浏览:363
安卓鸿蒙苹果哪个好用 发布:2025-01-19 10:32:33 浏览:264
正规物业保安怎么配置 发布:2025-01-19 10:27:30 浏览:518
断裂下载ftp 发布:2025-01-19 10:27:30 浏览:641
安卓导航怎么调对比度 发布:2025-01-19 10:26:52 浏览:25
服务器共享文件如何查看访问记录 发布:2025-01-19 10:08:55 浏览:400
datasourceSQL 发布:2025-01-19 10:01:25 浏览:838
aspnet网站的编译 发布:2025-01-19 10:00:49 浏览:334