软件园学生在线

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

登录与注册

【后端一】高硕泽

  • gsz
  • 2022-10-15
  • 0

基于SpringBoot的四则运算API

一、关于产品

(一)使用

在使用时基于SpringBoot网址栏输入代码后输入如下url可实现四则运算:

  • 加法 localhost:8080/add?a=%d&b=%d
  • 减法 localhost:8080/sub?a=%d&b=%d
  • 乘法 localhost:8080/mul?a=%d&b=%d
  • 除法 localhost:8080/div?a=%d&b=%d

p:使用时%d为输入数据,整型与浮点型均可,运行代码见文末。

(二)问题及解决方案

问题一:java本身只支持整型运算,造成很大局限性。

解决方案:通过使用BigDecimal,使浮点型数据可以运算。

问题二:浮点型数据运算存在精度丢失问题。

解决方案:通过BigDecimal中的toString方法,先将参数转为String类型,然后执行参数为String类型的BigDecimal的构造函数,可手动设置精度,及四舍五入等,从而减少精度丢失的情况。

问题三:常规整型与浮点型运算均存在数据溢出的情况。

解决方案:通过使用BigDecimal构造函数,方法同上,将参数转为String类型,后可解决int等类型的数据溢出问题。

二、关于学习

(一)学习过程(失败过程)

  1. 通过培训课,学会了基本的控制器(@RestController)映射方法(@GetMapping,@RequestParam),之后通过网络学习尝试了应用BigDecimal,但掌握比较浅显。
  2. 尝试学习通过thymeleaf建立简易前端,添加thymeleaf依赖及建立.html文件成功,源码中路径配置正常,.html文件运行正常,同时按照thymeleaf语法在后端控制器及templates下的.html文件中编写了程序,但后端程序运行时所有项目爆红,后经查询,可能是我的SpringBoot和thymeleaf的版本兼容问题(也可能是我的问题),所以在此不再展示,日后会继续研究,解决这个问题。
  3. 尝试学习将.html文件直接置于静态资源包中构建简易前端,在学习过程中理解了.html文件中代码及标签的含义,但是理解不到位,导致这个想法尚未实现,日后会继续学习。

(二)其他知识

在这几天的学习过程中,虽然有很多失败的尝试,但是同时也学到的一些方法,例如:

  1. 尝试在WebMvcAutoConfiguration中阅读源代码,对于其中部分内容有了初步的了解。
  2. 学会阅读英文文档,尝试阅读thymeleaf官网上的英文文档,虽然不能完全看懂,但是已经能初步接受阅读英文学习知识这种形式。

三、代码

package com.example.firstspringboot.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.math.BigDecimal;
import java.math.RoundingMode;

@RestController
public class Main {
    @GetMapping("/add")
    public static double add(@RequestParam double a,@RequestParam double b){
        BigDecimal b1 = new BigDecimal(Double.toString(a));
        BigDecimal b2 = new BigDecimal(Double.toString(b));
        return b1.add(b2).doubleValue();
    }
    @GetMapping("/sub")
    public static double sub(@RequestParam double a,@RequestParam double b){
        BigDecimal b1 = new BigDecimal(Double.toString(a));
        BigDecimal b2 = new BigDecimal(Double.toString(b));
        return b1.subtract(b2).doubleValue();
    }
    @GetMapping("/mul")
    public static double mul(@RequestParam double a,@RequestParam double b){
        BigDecimal b1 = new BigDecimal(Double.toString(a));
        BigDecimal b2 = new BigDecimal(Double.toString(b));
        return b1.multiply(b2).doubleValue();
    }
    @GetMapping("/div")
    public static double div(@RequestParam double a, @RequestParam double b,  int scale){
        BigDecimal b1 = new BigDecimal(Double.toString(a));
        BigDecimal b2 = new BigDecimal(Double.toString(b));

        return b1.divide(b2, 2 , RoundingMode.HALF_UP).doubleValue();

    }

}
gsz
gsz
© 2025 软件园学生在线
Theme by Wing