Dart接收Long类型的精度问题

一、问题

在Java和Dart之间传递长整型数据时,可能会遇到精度问题。由于Java中的long类型是64位的,而Dart 被编译为 JavaScript 时,它最多只能精确表示53位整数。

如果你在Java中发送一个超过53位的long值,当这个值被Dart接收时,它会丢失精度。为了解决这个问题,你可以在Dart端使用double来接收值,或者使用字符串来传递数据,并在Dart端将字符串转换回数字。

数字类型

Dart中的数字类型用于表示数字文字。Dart中的数字类型有两种类型:

  1. int:整数值表示非小数值,即没有小数点的数值。整数值不大于64位, 具体取决于平台。 在 Dart VM 上, 值的范围从 -2^63 到 2^63 - 1。 Dart 被编译为 JavaScript 时,使用 JavaScript numbers, 值的范围从 -2^53 到 2^53 - 1。例如,10是整数。使用int关键字表示整数文字。
  2. double:Dart还支持小数数值,即带小数点的值。Dart中的Double数据类型表示64位(双精度)浮点数。例如,10.10。关键字double用于表示浮点文字。

int 和 double 都是num的子类。 

二、解决方案

使用字符串传递

Java端:

import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;

# 在long类型的字段上添加序列化注解即可

    @TableId(type = IdType.ASSIGN_ID)
    @JsonSerialize(using = ToStringSerializer.class)
    protected Long id;

Dart端:

import 'dart:html';

void main() {
  // 假设你是通过HTTP请求传递的
  querySelector('#output').text = receiveLongAsStringFromJava();
}

String receiveLongAsStringFromJava() {
  // 将Java传递的long值作为字符串接收
  // 此处需要实现从Java到Dart的通信逻辑
}

String receiveLongAsStringFromJava() {
  return '1234567890123456789'; // 示例字符串,应从实际通信中接收
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值