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 BigDecimal
para 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.