产品说明(简易计算器)
1.使用
提供了三个 key
num1 和 num2 和 c
num1 为第一个数
num2 为第二个数
c 用来储存运算符号,支持 + 、- 、* 、/ 四种运算
2.考虑情况
(1) 考虑了数据范围的问题,参考了群里大佬说的 BigDecimal。
(2) 考虑了数据是否准确的问题,检验了 num1 和 num2 是否为数字,c 是否为支持的运算符号。
(3) 考虑了除数是否为 0 的情况,在读入数据之后进行判断。
(4) 考虑了除法得出得结果,有可能会出现无限小数的情况,所以限定了 6 位小数。
学习历程
1.BigDemical
在网上查询了相关资料,学会了如何定义一个 BigDecimal 变量,了解了附带的一些运算方法。
2.判断字符串是否为数字
private static final Pattern NUMBER_PATTERN = Pattern.compile("-?\\d+(\\.\\d+)?");
public static boolean isNumeric2(String str) {
return str != null && NUMBER_PATTERN.matcher(str).matches();
}
这一段是从网上抄的,大致意思是,先设定了一个包含数字的变量,然后写一个方法,调用这个变量来检验别的字符串是否符合要求,如果符合的话,就返回 True 的结果,即是数字,否则返回 False 的结果,不是一个数字。
运用这一个来对 num1 和 num2 进行判断,如果不是数字,则返回 错误,请正确输入!
判断除数是否为 0 还有判断 c 是否为四则运算符比较容易
代码
Ps:由于运用了 BigDecimal 自带的运算方法,就没有写 Service 了
@RestController
public class MainController {
/**用来判断字符串内是否都为数字**/
private static final Pattern NUMBER_PATTERN = Pattern.compile("-?\\d+(\\.\\d+)?");
public static boolean isNumeric2(String str) {
return str != null && NUMBER_PATTERN.matcher(str).matches();
}
@Autowired
MainService calc;
@GetMapping("/")
public String HelloWorld(){
return "Hello World!";
}
@PostMapping("/calc")
public String add(@RequestParam String num1, @RequestParam String num2, @RequestParam String c){
BigDecimal num11;
BigDecimal num22;
if(isNumeric2(num1)) num11 = new BigDecimal(num1);
else return "错误,请正确输入!";
if(isNumeric2(num1)) num22 = new BigDecimal(num2);
else return "错误,请正确输入!";
if(c.equals("/") && num2.equals("0")) return "错误,请正确输入!除数不应为 0" ;
return switch (c) {
case " ", "+" -> "计算结果为:" + num11.add(num22);
case "-" -> "计算结果为:" + num11.subtract(num22);
case "*" -> "计算结果为:" + num11.multiply(num22);
case "/" -> "计算结果为:" + num11.divide(num22,6, RoundingMode.HALF_UP);
default -> "错误,请正确输入!";
};
}
}