[译]Dart精度无损小数计算库decimal

1,889 阅读1分钟

原文:decimal | Dart Package (flutter-io.cn)

译时版本:# 2.3.2


Dart Decimals

Build Status

该库可像 Double 操作一样计算小数,并且不会丢失精度。

例:

// 使用 double
print(0.2 + 0.1); // 显示 0.30000000000000004

// 使用 decimal
print(Decimal.parse('0.2') + Decimal.parse('0.1')); // 显示 0.3

用法

要在代码中使用该库:

  • 在 pubspec.yaml 中添加依赖:
dependencies:
  decimal:
  • 在 dart 代码中导入:
import 'package:decimal/decimal.dart';
  • 使用 Decimal.parse('1.23') 开始计算。

提示 : 想使代码精简的话,可以为 Decimal.parse 定义一个快捷方式:

final d = (String s) => Decimal.parse(s);
d('0.2') + d('0.1'); // => 0.3

使用 intl 格式化

可以使用 intl 库格式化小数, 将小数基于 package:decimal/intl.dart 库包装为 DecimalIntl

import 'package:decimal/decimal.dart';
import 'package:decimal/intl.dart';

main() {
  var value = Decimal.parse('1234.56');
  var formatter = NumberFormat.decimalPattern('en-US');
  print(formatter.format(DecimalIntl(value)));
}

小技巧: 可以定义扩展使其不那么冗长:

extension on Decimal {
  String formatWith(NumberFormat formatter) => formatter.format(DecimalIntl(this));
}
main() {
  var value = Decimal.parse('1234.56');
  var formatter = NumberFormat.decimalPattern('en-US');
  print(value.formatWith(formatter));
}

许可证

Apache 2.0