浮点数能给整数赋值吗java_求助 用java能实现整数与浮点数的混合运算么?

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

package com.frank.action; import java.text.DecimalFormat; public class Jisuan { private static int CHENG_INDEX; //* 下标

private static int CHU_INDEX; // /下标

private static int JIA_INDEX; // + 下标

private static int JIAN_INDEX; // - 下标

private static int NUM1_INDEX;//运算符的前一个运算符下标

private static int NUM2_INDEX;//运算符的后一个运算符下标

private static double NUM1;//第一个数

private static double NUM2;//第二个数

private static String STR; //原始表达式

static DecimalFormat df = new DecimalFormat("#.##"); //格式化计算数字方便算法

public static void main(String[] args) {

String str="100-8*2";

STR = str;

J(str);

}

/**

* @param str 表达式

*/

public static void J(String str){

CHENG_INDEX = str.indexOf("*"); //获取 * 下标

CHU_INDEX = str.indexOf("/"); //获取 / 下标

JIA_INDEX = str.indexOf("+"); //获取 + 下标

JIAN_INDEX = str.indexOf("-"); //获取 - 下标

if(JIA_INDEX == -1 && JIAN_INDEX == -1 && CHENG_INDEX == -1 && CHU_INDEX == -1){

System.out.println("最后计算结果是:"+STR+"="+str);

}else if(CHENG_INDEX == -1 && CHU_INDEX == -1){ //* /同时不存在

if(JIA_INDEX != -1 && JIAN_INDEX == -1){ //只存在 +

J(Jia(str, "+", JIA_INDEX)); //调用加法运算方法

}else if(JIA_INDEX == -1 && JIAN_INDEX != -1){ //只存在 -

J(Jian(str, "-", JIAN_INDEX)); //调用减法运算方法

}else if(JIA_INDEX != -1 && JIAN_INDEX != -1){ //同时存在 + -

if(JIA_INDEX > JIAN_INDEX){ //判断先后顺序

J(Jian(str, "-", JIAN_INDEX)); //调用减法运算方法

}else{

J(Jia(str, "+", JIA_INDEX)); //调用加法运算方法

}

}

}else if(CHENG_INDEX != -1 && CHU_INDEX == -1){ //只存在 *

J(Cheng(str, "*", CHENG_INDEX)); //调用乘法运算方法

}else if(CHENG_INDEX == -1 && CHU_INDEX != -1){ //只存在 /

J(Chu(str, "/", CHU_INDEX)); //调用除法运算方法

}else if(CHENG_INDEX != -1 && CHU_INDEX != -1){ //同时存在 * /

if(CHENG_INDEX > CHU_INDEX){ //判断先后顺序

J(Chu(str, "/", CHU_INDEX)); //调用除法运算方法

}else{

J(Cheng(str, "*", CHENG_INDEX)); //调用乘法运算方法

}

}

}

// 求第一个数

private static String Num1(String string, String str, int index){

NUM1_INDEX = 0;

for(int i = string.substring(0,index).length() - 1;i >= 0;i--){//遍历预算符前面字符求第一个数

if(!String.valueOf(string.substring(0,index).charAt(i)).matches("[0-9]|[\\.]")){//正则表达式验证

NUM1_INDEX = i; //获取前一个运算符下标

break;

}

}

if(NUM1_INDEX == 0){ //如果前面没有运算符

return df.format(Double.valueOf(string.substring(0,index)));

}else{

return df.format(Double.valueOf(string.substring(0, index).substring(NUM1_INDEX+1, index)));//求第一个数

}

}

// 求第二个数

private static String Num2(String string, String str, int index){

NUM2_INDEX = 0;

for(int i = 0;i < string.substring(index+1,string.length()).length();i++){//遍历预算符前面字符求第一个数

if(!String.valueOf(string.substring(index+1,string.length()).charAt(i)).matches("[0-9]|[\\.]")){//正则表达式验证

NUM2_INDEX = i; //获取后一个运算符下标

break;

}

}

if(NUM2_INDEX == 0){ //如果后面没有运算符

return df.format(Double.valueOf(string.substring(index+1,string.length())));

}else{

return df.format(Double.valueOf(string.substring(index+1, string.length()).substring(0,NUM2_INDEX)));//求第二个数

}

}

/**

*

* @param string 计算公式

* @param str 计算符号

* @param index 计算符号下标

* @return

*/

private static String Jia(String string, String str, int index){

if("+".equals(str)){

NUM1 = Double.valueOf(Num1(string, str, index)); //获取第一个数

NUM2 = Double.valueOf(Num2(string, str, index)); //获取第二个数

if(NUM1_INDEX == 0 && NUM2_INDEX == 0){ //如果前后没有运算符

string = df.format((NUM1+NUM2));

}else if(NUM1_INDEX == 0){

string = df.format((NUM1+NUM2))+string.substring(NUM2_INDEX + index + 1, string.length()); //拼接字符串

}else if(NUM1_INDEX != 0 && NUM2_INDEX == 0){

string = string.substring(0, NUM1_INDEX+1)+df.format((NUM1+NUM2)); //拼接字符串

}else{

string = string.substring(0, NUM1_INDEX+1)+df.format((NUM1+NUM2))+string.substring(NUM2_INDEX + index + 1, string.length()); //拼接字符串

}

}

System.out.println(string);

return string;

}

private static String Jian(String string, String str, int index){

if("-".equals(str)){

NUM1 = Double.valueOf(Num1(string, str, index)); //获取第一个数

NUM2 = Double.valueOf(Num2(string, str, index)); //获取第二个数

if(NUM1_INDEX == 0 && NUM2_INDEX == 0){ //如果前后没有运算符

string = df.format((NUM1-NUM2));

}else if(NUM1_INDEX == 0){

string = df.format((NUM1-NUM2))+string.substring(NUM2_INDEX + index + 1, string.length()); //拼接字符串

}else if(NUM1_INDEX != 0 && NUM2_INDEX == 0){

string = string.substring(0, NUM1_INDEX+1)+df.format((NUM1-NUM2)); //拼接字符串

}else{

string = string.substring(0, NUM1_INDEX+1)+df.format((NUM1-NUM2))+string.substring(NUM2_INDEX + index + 1, string.length()); //拼接字符串

}

}

System.out.println(string);

return string;

}

private static String Cheng(String string, String str, int index){

if("*".equals(str)){

NUM1 = Double.valueOf(Num1(string, str, index)); //获取第一个数

NUM2 = Double.valueOf(Num2(string, str, index)); //获取第二个数

if(NUM1_INDEX == 0 && NUM2_INDEX == 0){ //如果前后没有运算符

string = df.format((NUM1*NUM2));

}else if(NUM1_INDEX == 0 && NUM2_INDEX != 0){

string = df.format((NUM1*NUM2))+string.substring(NUM2_INDEX + index + 1, string.length()); //拼接字符串

}else if(NUM1_INDEX != 0 && NUM2_INDEX == 0){

string = string.substring(0, NUM1_INDEX+1)+df.format((NUM1*NUM2)); //拼接字符串

}else{

string = string.substring(0, NUM1_INDEX+1)+df.format((NUM1*NUM2))+string.substring(NUM2_INDEX + index + 1, string.length()); //拼接字符串

}

}

System.out.println(string);

return string;

}

private static String Chu(String string, String str, int index){

if("/".equals(str)){

NUM1 = Double.valueOf(Num1(string, str, index)); //获取第一个数

NUM2 = Double.valueOf(Num2(string, str, index)); //获取第二个数

if(NUM1_INDEX == 0 && NUM2_INDEX == 0){ //如果前后没有运算符

string = df.format((NUM1/NUM2));

}else if(NUM1_INDEX == 0){

string = df.format((NUM1/NUM2))+string.substring(NUM2_INDEX + index + 1, string.length()); //拼接字符串

}else if(NUM1_INDEX != 0 && NUM2_INDEX == 0){

string = string.substring(0, NUM1_INDEX+1)+df.format((NUM1/NUM2)); //拼接字符串

}else{

string = string.substring(0, NUM1_INDEX+1)+df.format((NUM1/NUM2))+string.substring(NUM2_INDEX + index + 1, string.length()); //拼接字符串

}

}

System.out.println(string);

return string;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值