后端第一次例会作业 四则运算
思路构建
主体思路
在service中编写四则运算方法,在controller中进行数据传入,调用方法,数据传出
问题处理
计算无限大小数据
使用BigDecimal类
计算小数
可使用double类型,但可计算数据有限,同上使用BigDEcimal类
判断数据类型是否有误
本想在判断数据类型时捕捉异常进行处理,但是还没学明白,决定先用现有知识处理
设想创建一个方法,先传入一个String类型的数据,将其放入char数组,遍历判断是否有不合法的字符。
若全部为数字,则将输入的String变量转为BigDecimal类型传出;若出现不合法的字符,则利用某方法输出一段文字提示类型错误,但是我不会,网上找不到,可能太基础或太冷门
所以将含有非法字符的字符串定义为数值0
代码
Service代码
import java.math.BigDecimal;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestParam;
@Service
public class ServiceOne {
//加法
public BigDecimal add(String a, String b){
BigDecimal i = StoD(a);
BigDecimal j = StoD(b);
return i.add(j);
}
//减法
public BigDecimal sub(String a, String b){
BigDecimal i = StoD(a);
BigDecimal j = StoD(b);
return i.subtract(j);
}
//乘法
public BigDecimal mul(String a, String b){
BigDecimal i = StoD(a);
BigDecimal j = StoD(b);
return i.multiply(j);
}
//除法
public BigDecimal div(String a, String b){
BigDecimal i = StoD(a);
BigDecimal j = StoD(b);
return i.divide(j);
}
//判断输入是否为数据
//若输入非数,则判定其数值为0
//将输入String类型转为BigDecimal类型来避免数据溢出
public BigDecimal StoD(String a){
char[] ar = a.toCharArray(); //char数组
int t = 0;
for(int i = 0 ; i < ar.length ; i++){
if ((ar[i] >= '0' && ar[i] <= '9')) {
} else {
t++;
}
}
BigDecimal ax = new BigDecimal(a);
ax = ax.setScale(2,BigDecimal.ROUND_HALF_UP);
return ax;
}
}
Controller代码
import com.example.demo.service.ServiceOne;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
import java.security.Provider;
@RequestMapping("/")
@RestController
public class Controller01 {
@Autowired
ServiceOne serviceOne;
//加法方法引导
@PostMapping("/add")
public BigDecimal add(@RequestParam String a, @RequestParam String b){
return serviceOne.add(a, b);
}
//减法引导
@PostMapping("/sub")
public BigDecimal sub(@RequestParam String a, @RequestParam String b){
return serviceOne.sub(a, b);
}
//乘法引导
@PostMapping("/mul")
public BigDecimal mul(@RequestParam String a, @RequestParam String b){
return serviceOne.mul(a, b);
}
//除法引导
@PostMapping("/div")
public BigDecimal div(@RequestParam String a, @RequestParam String b){
return serviceOne.div(a, b);
}
}