软件园学生在线

  • {{ item.name }}
  • 2023试用期

登录与注册

后端一 王心凌

  • HTr
  • 2023-10-29
  • 0

四则运算

产品说明

具体要求的完成也写在这里

  1. 使用

    输入localhost:8080/后选择输入add,minus,multiply或divide选择运算,?后输入a和b的数值得结果

  2. 特殊情况

    • 除数为零:返回提示

    • 商的精度:BigDecimal在进行除法运算时需设置精度,否则对于除不尽的情况会抛出异常,这里设置了三位小数,同时设定进位方法

    • 小数运算、数据溢出问题通过BigDecimal解决

    • 数据类型:

      1. 选择了BigDecimal(String)构造函数,输入的只能是spring,一个优点是整数或浮点数都可以输入,好像也不用判断数据类型了

      2. 但输入的string也必须是纯数字,带有字符或空格时报错500,不知道怎么实现检测

      3. 查到了由前端实现仅允许输入纯数字的方法,但是因为没有做前端,问题还是没解决


学习历程

参考&学习:

培训一:基于 Spring boot 的简单 REST API

知乎 BigDecimal的用法,如构造函数,运算法则,精度设置等

其余问题

  1. 代码重复

进行四则运算的方法除了除法完全相同

  1. 没有做前端

没解决,本来想研究一下前端实现在同一个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();
        }
    }
}
HTr
HTr
© 2025 软件园学生在线
Theme by Wing