Flutter中如何接收decimal类型数据

在Flutter中从API接收JSON数据时,如何正确解析decimal类型字段?目前使用json.decode()会将数值转为double,但后端返回的是高精度decimal类型,导致精度丢失。是否有标准方案能像C#那样用decimal.parse()直接处理?是否需要自定义JsonConverter或第三方库支持?

2 回复

在Flutter中,接收decimal类型数据可使用decimal包。安装后,通过Decimal.parse()将字符串或数字转换为Decimal类型,确保精确计算。

更多关于Flutter中如何接收decimal类型数据的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中接收decimal类型数据,推荐以下几种方法:

1. 使用字符串接收(推荐)

String decimalString = '123.45';
BigDecimal decimalValue = BigDecimal.parse(decimalString);

2. 使用decimal包

首先在pubspec.yaml中添加依赖:

dependencies:
  decimal: ^2.3.0

然后使用:

import 'package:decimal/decimal.dart';

// 从字符串创建
Decimal decimal1 = Decimal.parse('123.456');

// 从整数创建
Decimal decimal2 = Decimal.fromInt(123);

// 从double创建(注意精度问题)
Decimal decimal3 = Decimal.parse(123.456.toString());

3. 从JSON接收

Map<String, dynamic> json = {'price': '123.45'};
Decimal price = Decimal.parse(json['price'].toString());

4. 使用BigDecimal包

dependencies:
  big_decimal: ^1.0.2
import 'package:big_decimal/big_decimal.dart';

BigDecimal decimal = BigDecimal.parse('123.456789');

最佳实践建议:

  • 始终使用字符串格式传输decimal数据,避免浮点数精度问题
  • 在后端API中返回字符串格式的decimal值
  • 在前端使用decimal包进行精确计算

这样可以确保金融计算、价格等场景下的精度准确性。

回到顶部