Caused by: org.postgresql.util.PSQLException: 错误: 数字字段溢出
  详细:精度为10,范围是8的字段必须四舍五入到小于10^2的绝对值

我的数据库字段类型是 NUMERIC(10, 8) 入库抛出的异常
实体类 采用的是 BigDecimal
后端在接收前端的参数
2024-11-07T06:54:07.png

问题分析,问题出在 startPortLat 字段的数值超出了 NUMERIC(10, 8) 的范围。NUMERIC(10, 8) 表示总共有 10 位数字,其中小数部分有 8 位。这意味着整数部分最多只能有 2 位数字。

分析

  1. 字段定义

    • NUMERIC(10, 8):总共有 10 位数字,其中 8 位是小数部分,2 位是整数部分。
    • 例如,12.34567890 是一个有效的值,但 123.4567890 就不是,因为整数部分超过了 2 位。
  2. 输入值

    • 35.48833333:这个值的整数部分是 35,超过了 2 位,因此会导致溢出。

调整数据库字段类型

  • 如果你需要存储更大的整数部分,可以考虑增加 NUMERIC 的总长度和小数部分长度。例如,可以将字段类型改为 NUMERIC(12, 8),这样整数部分可以有 4 位,小数部分有 8 位。

解决方案:调整数据库字段类型

ALTER TABLE your_table_name
ALTER COLUMN start_port_lat TYPE NUMERIC(12, 8);

调整输入值

在插入数据前,可以对输入值进行检查和处理:

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

public class Main {
    public static void main(String[] args) {
        BigDecimal input = new BigDecimal("35.48833333");
        BigDecimal roundedValue = input.setScale(8, RoundingMode.HALF_UP);
        System.out.println("Rounded Value: " + roundedValue);
    }
}

完整示例

假设你的表名为 design_voyage,你可以执行以下 SQL 语句来调整字段类型:

ALTER TABLE design_voyage
ALTER COLUMN start_port_lat TYPE NUMERIC(12, 8);
最后修改:2024 年 11 月 11 日
如果觉得我的文章对你有用,请随意赞赏