A armadilha do tipo de retorno da interface é List<Long>

demonstração de perda de dados

Como escrever no controlador

@Operation(summary = "通过标签获取表单id")
    @GetMapping("listIdByTag")
    public Result<List<Long>> listIdByTag(@ModelAttribute Query query) {
    
    
        query.setUserId(contextUtil.getUserid());
        return Result.content(demoService.listIdByTag(query));
    }
实际数据:
[1656187461040214016,1650042689615695872,1656188185293623296]
前端接收到是数据:
[1656187461040214000,1650042689615696000,1656188185293623300]

É óbvio que há uma perda de precisão.

A perda de precisão é um problema comum ao lidar com dados numéricos, especialmente ao trabalhar com números de ponto flutuante. Para evitar perda de precisão, você pode usar o tipo string em vez do tipo numérico ao transferir dados entre o front e o backend.

Especificamente, se o tipo de retorno da interface no Spring Boot for List<Long>, você poderá convertê-lo em List<String>tipo e, em seguida, converter o valor do tipo string em tipo Long quando recebido pelo front end. Por exemplo, você pode usar o método String.valueOf() em Java para converter um valor do tipo Long em um tipo String. O front end então usa métodos como parseInt() ou parseFloat() para converter o valor do tipo String em um Long ao analisar a matriz JSON. digite.

Além disso, se precisar realizar cálculos de ponto flutuante, você pode usar classes em Java BigDecimalpara evitar perda de precisão. A classe BigDecimal fornece funções de cálculo digital de alta precisão e pode lidar com decimais com qualquer número de dígitos, evitando assim problemas de precisão em cálculos de ponto flutuante.

Resumir

Ao processar dados do tipo numérico, é necessário selecionar o tipo de dados e o método de cálculo apropriados de acordo com o cenário específico para evitar problemas como perda de precisão.

Acho que você gosta

Origin blog.csdn.net/zhoqua697/article/details/130638261
Recomendado
Clasificación