インターフェースの戻り値の型の落とし穴はList<Long>です

データ損失のデモ

コントローラーへの書き込み方法

@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 クラスは高精度のデジタル計算関数を提供し、任意の桁数の小数を処理できるため、浮動小数点計算における精度の問題を回避できます。

要約する

数値データを処理する場合、精度の低下などの問題を避けるために、具体的なシナリオに応じて適切なデータの種類と計算方法を選択する必要があります。

おすすめ

転載: blog.csdn.net/zhoqua697/article/details/130638261