Flutter中如何格式化Polygon代币API返回的数值?
在Flutter中处理Polygonscan代币API返回的大数值格式
Polygonscan返回的数值是wei单位的代币数量,MATIC(Polygon原生代币)的小数位数为18位,所以需要将返回值除以10^18来转换为实际的代币数量。以下是两种可靠的实现方式:
方式一:直接使用BigInt计算(无需额外依赖)
由于API返回的数值极大,超出普通整数类型的存储范围,必须用BigInt处理:
// API返回的字符串数值 String apiReturnedValue = "14442000000000000000000"; // 转换为BigInt BigInt weiAmount = BigInt.parse(apiReturnedValue); // MATIC的小数位数是18,计算除数 BigInt divisor = BigInt.from(10).pow(18); // 计算实际代币数量 BigInt actualAmount = weiAmount ~/ divisor; // 转换为字符串或整数用于展示 String displayValue = actualAmount.toString(); // 输出"14442"
方式二:使用decimal包(避免浮点数精度误差)
如果需要处理带小数的代币数量,推荐使用decimal包保证计算精度:
- 先在
pubspec.yaml中添加依赖:
dependencies: decimal: ^2.3.3
- 实现转换逻辑:
import 'package:decimal/decimal.dart'; String apiReturnedValue = "14442000000000000000000"; Decimal weiAmount = Decimal.parse(apiReturnedValue); Decimal divisor = Decimal.fromInt(10).pow(18); Decimal actualAmount = weiAmount / divisor; // 转换为纯整数字符串(无小数) String displayValue = actualAmount.toStringAsFixed(0); // 输出"14442"
注意:如果是其他类型的代币,需要先通过Polygonscan的API获取该代币的decimals字段值,再替换上述代码中的18进行计算。
内容的提问来源于stack exchange,提问作者AI.
相关产品推荐
相关产品推荐

