「字符串四则运算java」四则运算符有哪些

博主:adminadmin 2023-01-06 19:24:06 764

今天给各位分享字符串四则运算java的知识,其中也会对四则运算符有哪些进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

求字符串解析四则运算的Java代码

package samples;

/**

* @author sghitxia

*

*/

public class C {

public static void main(String[] args) {

String str = "(1+{1+2+3+[2+(4+5)+(9+3*7*6)]}+2+{3*5+[2+(4+5)+(9+3)]}+2)";

System.out.println(cacComplex(str));

}

private static double cacComplex(String str) {

if (str.equals(""))

return 0;

System.out.println("CAC:" + str);

str = str.replaceAll("[\\[\\{]", "(").replaceAll("[\\]\\}]", ")");

int cl = str.lastIndexOf('(');

if (cl == -1)

return cac(str);

int cr = str.indexOf(')', cl);

String left = str.substring(0, cl);

String right = str.substring(cr + 1);

String middle = str.substring(cl + 1, cr);

return cacComplex(left + cac(middle) + right);

}

public static double cac(String str) {

if (str.equals(""))

return 0;

int ml = str.indexOf('*');

int dl = str.indexOf('/');

if (ml == -1 dl == -1) {

return cacNoMD(str);

}

int index = ml == -1 ? dl : ml;

// 4+5*6*7+8

String left = str.substring(0, index);// 4+5

String m1 = lastNumber(left);

left = left.substring(0, left.length() - m1.length());

String right = str.substring(index + 1);// 6*7+8

String m2 = firstNumber(right);// m2:6

right = right.substring(m2.length());// *7+8

double d1 = Double.parseDouble(m1);

double d2 = Double.parseDouble(m2);

double tmp = 0;

if (index == ml) {

tmp = d1 * d2;

} else if (index == dl) {

tmp = d1 / d2;

}

return cac(left + tmp + right);

}

private static String lastNumber(String str) {

StringBuilder sb = new StringBuilder();

for (int i = str.length() - 1; i = 0; i--) {

char c = str.charAt(i);

if (!Character.isDigit(c) c != '.')

break;

sb.append(c);

}

return sb.reverse().toString();

}

private static String firstNumber(String str) {

StringBuilder sb = new StringBuilder();

for (char c : str.toCharArray()) {

if (!Character.isDigit(c) c != '.')

break;

sb.append(c);

}

return sb.toString();

}

private static double cacNoMD(String str) {

double ret = 0;

StringBuilder sb = new StringBuilder();

char sign = '+';

for (char c : (str + "+").toCharArray()) {

if (!Character.isDigit(c) c != '.') {

if (sb.length() == 0)

continue;

double tmp = Double.parseDouble(sb.toString());

if (sign == '+') {

ret += tmp;

} else {

ret -= tmp;

}

sb = new StringBuilder();

sign = c;

} else {

sb.append(c);

}

}

return ret;

}

}

用java编写一个方法,如果两个字符串是纯数学,完成四则运算

在《Effective   Java》这本书中也提到这个原则,float和double只能用来做科学计算或者是工程计算,在商业计算中我们要用java.math.BigDecimal

使用BigDecimal并且一定要用String来够造。   

但是想像一下吧,如果我们要做一个加法运算,需要先将两个浮点数转为String,然后够造成BigDecimal,在其中一个上调用add方法,传入另一个作为参数,然后把运算的结果(BigDecimal)再转换为浮点数。你能够忍受这么烦琐的过程吗?下面我们提供一个工具类Arith来简化操作。它提供以下静态方法,包括加减乘除和四舍五入:   

public   static   double   add(double   v1,double   v2)   

public   static   double   sub(double   v1,double   v2)   

public   static   double   mul(double   v1,double   v2)   

public   static   double   div(double   v1,double   v2)   

public   static   double   div(double   v1,double   v2,int   scale)   

public   static   double   round(double   v,int   scale)  

import java.math.BigDecimal; 

/**

 * 进行BigDecimal对象的加减乘除,四舍五入等运算的工具类

 * @author ameyume

 *

 */

public class Arith { 

/** 

* 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精 

* 确的浮点数运算,包括加减乘除和四舍五入。 

*/ 

//默认除法运算精度 

private static final int DEF_DIV_SCALE = 10; 

   

//这个类不能实例化 

private Arith(){ 

    /** 

     * 提供精确的加法运算。 

     * @param v1 被加数 

     * @param v2 加数 

     * @return 两个参数的和 

     */ 

    public static double add(double v1,double v2){ 

        BigDecimal b1 = new BigDecimal(Double.toString(v1)); 

        BigDecimal b2 = new BigDecimal(Double.toString(v2)); 

        return b1.add(b2).doubleValue(); 

    } 

    

    /** 

     * 提供精确的减法运算。 

     * @param v1 被减数 

     * @param v2 减数 

     * @return 两个参数的差 

     */ 

    public static double sub(double v1,double v2){ 

        BigDecimal b1 = new BigDecimal(Double.toString(v1)); 

        BigDecimal b2 = new BigDecimal(Double.toString(v2)); 

        return b1.subtract(b2).doubleValue(); 

    } 

    

    /** 

     * 提供精确的乘法运算。 

     * @param v1 被乘数 

     * @param v2 乘数 

     * @return 两个参数的积 

     */ 

    public static double mul(double v1,double v2){ 

        BigDecimal b1 = new BigDecimal(Double.toString(v1)); 

        BigDecimal b2 = new BigDecimal(Double.toString(v2)); 

        return b1.multiply(b2).doubleValue(); 

    } 

    /** 

     * 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到 

     * 小数点以后10位,以后的数字四舍五入。 

     * @param v1 被除数 

     * @param v2 除数 

     * @return 两个参数的商 

     */ 

    public static double div(double v1,double v2){ 

        return div(v1,v2,DEF_DIV_SCALE); 

    } 

    /** 

     * 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指 

     * 定精度,以后的数字四舍五入。 

     * @param v1 被除数 

     * @param v2 除数 

     * @param scale 表示表示需要精确到小数点以后几位。 

     * @return 两个参数的商 

     */ 

    public static double div(double v1,double v2,int scale){ 

        if(scale0){ 

            throw new IllegalArgumentException( 

                "The scale must be a positive integer or zero"); 

        } 

        BigDecimal b1 = new BigDecimal(Double.toString(v1)); 

        BigDecimal b2 = new BigDecimal(Double.toString(v2)); 

        return b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue(); 

    } 

    /** 

     * 提供精确的小数位四舍五入处理。 

     * @param v 需要四舍五入的数字 

     * @param scale 小数点后保留几位 

     * @return 四舍五入后的结果 

     */ 

    public static double round(double v,int scale){ 

        if(scale0){ 

            throw new IllegalArgumentException( 

                "The scale must be a positive integer or zero"); 

        } 

        BigDecimal b = new BigDecimal(Double.toString(v)); 

        BigDecimal one = new BigDecimal("1"); 

        return b.divide(one,scale,BigDecimal.ROUND_HALF_UP).doubleValue(); 

    } 

    

   /** 

    * 提供精确的类型转换(Float) 

    * @param v 需要被转换的数字 

    * @return 返回转换结果 

    */ 

    public static float convertsToFloat(double v){ 

   BigDecimal b = new BigDecimal(v); 

   return b.floatValue(); 

    } 

    

    /** 

* 提供精确的类型转换(Int)不进行四舍五入 

* @param v 需要被转换的数字 

* @return 返回转换结果 

*/ 

public static int convertsToInt(double v){ 

BigDecimal b = new BigDecimal(v); 

   return b.intValue(); 

/** 

* 提供精确的类型转换(Long) 

* @param v 需要被转换的数字 

* @return 返回转换结果 

*/ 

public static long convertsToLong(double v){ 

BigDecimal b = new BigDecimal(v); 

   return b.longValue(); 

/** 

* 返回两个数中大的一个值 

* @param v1 需要被对比的第一个数 

* @param v2 需要被对比的第二个数 

* @return 返回两个数中大的一个值 

*/ 

public static double returnMax(double v1,double v2){ 

BigDecimal b1 = new BigDecimal(v1); 

BigDecimal b2 = new BigDecimal(v2); 

   return b1.max(b2).doubleValue(); 

/** 

* 返回两个数中小的一个值 

* @param v1 需要被对比的第一个数 

* @param v2 需要被对比的第二个数 

* @return 返回两个数中小的一个值 

*/ 

public static double returnMin(double v1,double v2){ 

BigDecimal b1 = new BigDecimal(v1); 

BigDecimal b2 = new BigDecimal(v2); 

   return b1.min(b2).doubleValue(); 

/** 

* 精确对比两个数字 

* @param v1 需要被对比的第一个数 

* @param v2 需要被对比的第二个数 

* @return 如果两个数一样则返回0,如果第一个数比第二个数大则返回1,反之返回-1 

*/ 

public static int compareTo(double v1,double v2){ 

BigDecimal b1 = new BigDecimal(v1); 

BigDecimal b2 = new BigDecimal(v2); 

   return b1.compareTo(b2); 

}

}

Java中怎么能实现从键盘输入几个数字后进行四则运算

  Java中提供了一个Scanner类,接受用户从键盘敲入的数值,具体 使用例子如下:

  Scanner s = new Scanner(System.in);//接受键盘输入的数值。

  int str = s.next();//将输入的字符串转换为int类型,就可以进行四则运算。

java实现四则运算

这里计算要用到栈!

要是学过基础的数据结构你应该知道怎么计算!

其实挺挺复杂的!

栈读取每一个数值和操作符

根据不同的优先级进行计算!

给你推荐一个地址!看一下!

关于字符串四则运算java和四则运算符有哪些的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。