データ損失のデモ
コントローラーへの書き込み方法
@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]
精度が落ちているのは明らかです。
精度の低下は、数値データを扱うとき、特に浮動小数点数を扱うときの一般的な問題です。精度の低下を避けるために、フロントエンドとバックエンド間でデータを転送するときに数値型の代わりに文字列型を使用できます。
具体的には、Spring Boot のインターフェイスの戻り値の型が の場合、それを型に変換し、フロントエンドで受信したときに文字列型の値を Long 型に変換できList<Long>
ます。List<String>
たとえば、Java で String.valueOf() メソッドを使用して Long 型の値を String 型に変換すると、フロントエンドは parseInt() や parseFloat() などのメソッドを使用して String 型の値を Long 型に変換します。 JSON 配列を解析するとき。
さらに、浮動小数点計算を実行する必要がある場合は、Java のクラスを使用してBigDecimal
精度の低下を避けることができます。BigDecimal クラスは高精度のデジタル計算関数を提供し、任意の桁数の小数を処理できるため、浮動小数点計算における精度の問題を回避できます。
要約する
数値データを処理する場合、精度の低下などの問題を避けるために、具体的なシナリオに応じて適切なデータの種類と計算方法を選択する必要があります。