當前位置:首頁 » 編程語言 » 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的夾角!

熱點內容
c語言char數組長度 發布:2025-01-19 07:46:23 瀏覽:10
淘寶如何清理緩存垃圾 發布:2025-01-19 07:42:07 瀏覽:438
電腦輸入密碼階段如何改語言 發布:2025-01-19 07:42:05 瀏覽:786
存儲器國產率 發布:2025-01-19 07:04:36 瀏覽:567
銳程cc藍鯨版選什麼配置 發布:2025-01-19 06:56:28 瀏覽:169
城鎮居民醫保卡的原始密碼是多少 發布:2025-01-19 06:55:54 瀏覽:788
wifi密碼如何修改密碼 發布:2025-01-19 06:39:06 瀏覽:962
sqlserver認證 發布:2025-01-19 06:34:30 瀏覽:815
小米8se安卓p有什麼功能 發布:2025-01-19 06:25:22 瀏覽:359
ucos和linux 發布:2025-01-19 06:24:06 瀏覽:471