四则运算
产品说明
具体要求的完成也写在这里
-
使用
输入localhost:8080/后选择输入add,minus,multiply或divide选择运算,?后输入a和b的数值得结果
-
特殊情况
-
除数为零:返回提示
-
商的精度:BigDecimal在进行除法运算时需设置精度,否则对于除不尽的情况会抛出异常,这里设置了三位小数,同时设定进位方法
-
小数运算、数据溢出问题通过BigDecimal解决
-
数据类型:
-
选择了BigDecimal(String)构造函数,输入的只能是spring,一个优点是整数或浮点数都可以输入,好像也不用判断数据类型了
-
但输入的string也必须是纯数字,带有字符或空格时报错500,不知道怎么实现检测
-
查到了由前端实现仅允许输入纯数字的方法,但是因为没有做前端,问题还是没解决
-
-
学习历程
参考&学习:
培训一:基于 Spring boot 的简单 REST API
知乎 BigDecimal的用法,如构造函数,运算法则,精度设置等
其余问题
- 代码重复
进行四则运算的方法除了除法完全相同
- 没有做前端
没解决,本来想研究一下前端实现在同一个url下进行四则运算,设置文本域和按钮之后的工作不知道该怎么办了
代码
Controller
package com.example.demo.Controller;
import com.example.demo.Service.MainService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class MainController {
//本来的写法IDEA建议改了,不知道为什么,先放在注释里
final
MainService mainService;
public MainController(MainService mainService) {
this.mainService = mainService;
}
/*
@Autowired
MainService mainService;
*/
@GetMapping("/add")
public String add(@RequestParam String a, @RequestParam String b){
return mainService.add(a,b);
}
@GetMapping("/minus")
public String minus(@RequestParam String a, @RequestParam String b){
return mainService.minus(a,b);
}
@GetMapping("/multiply")
public String multiply(@RequestParam String a, @RequestParam String b){
return mainService.multiply(a,b);
}
@GetMapping("/divide")
public String divide(@RequestParam String a, @RequestParam String b){
return mainService.divide(a,b);
}
}
Service
package com.example.demo.Service;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.math.RoundingMode;
@Service
public class MainService {
public String add(String a, String b){
//BigDecimal(String)构造函数
BigDecimal a1 = new BigDecimal(a);
BigDecimal b1 = new BigDecimal(b);
//方法返回值设定为String,返回时需要转换
return a1.add(b1).toString();
}
public String minus(String a,String b){
BigDecimal a1 = new BigDecimal(a);
BigDecimal b1 = new BigDecimal(b);
return a1.subtract(b1).toString();
}
public String multiply(String a,String b){
BigDecimal a1 = new BigDecimal(a);
BigDecimal b1 = new BigDecimal(b);
return a1.multiply(b1).toString();
}
public String divide(String a,String b){
BigDecimal a1 = new BigDecimal(a);
BigDecimal b1 = new BigDecimal(b);
if (b.equals("0")){
//b=0时提示
return "0不能做除数";
}
else{
//设置三位小数精度和四舍五入
return a1.divide(b1,3, RoundingMode.HALF_UP).toString();
}
}
}