Flutter数字格式化插件number_format_ext的使用

发布于 1周前 作者 ionicwang 来自 Flutter

Flutter数字格式化插件number_format_ext的使用

Numberformat 扩展,为 Numberformat 添加了 floorceil 方法。 支持格式化 numRationalDecimal。 默认情况下,Numberformatformat 方法是 round。这就是我编写此包的原因。

特性

  • ✅ 格式化 num
  • ✅ 格式化 Decimal
  • ✅ 格式化 Rational
  • ✅ floor
  • ✅ ceil

开始使用

如果你使用的是 decimal: ^1.5.0,请使用 number_format_ext: ^1.5.0

如果你使用的是 decimal: ^2.3.0,请使用 number_format_ext: ^2.3.0

dart pub get number_format_ext
# 或
flutter pub get number_format_ext

使用方法

更多示例请查看: ./example/number_format_ext_example.dart./test/number_format_ext_test.dart

final f22 = NumberFormat.decimalPattern();
f22.minimumFractionDigits = 2;
f22.maximumFractionDigits = 2;

final d1_19 = Decimal.parse('1.111111111');
print(f22.formatWithCondition(d1_19)); // 1.11 (默认四舍五入)
print(f22.formatWithCondition(d1_19, ceil: true)); // 1.12

final d1_99 = Decimal.parse('1.999999999');
print(f22.formatWithCondition(d1_99)); // 2.00 (默认四舍五入)
print(f22.formatWithCondition(d1_99, floor: true)); // 1.99

额外信息


完整示例

以下是一个完整的示例,展示了如何使用 number_format_ext 插件进行数字格式化:

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

void main() {
  final f22 = NumberFormat.decimalPattern();
  final f28 = NumberFormat.decimalPattern();

  f22.minimumFractionDigits = 2;
  f22.maximumFractionDigits = 2;

  f28.minimumFractionDigits = 2;
  f28.maximumFractionDigits = 8;

  final rational = Rational.parse('1.999999');
  
  // formatWithCondition 可以处理 Rational 类型
  // print(f22.format(rational));
  
  /// !!!
  /*
  直接使用 double 进行精确计算(例如金融)会导致精度问题。不建议直接使用 double。
  请使用 Decimal!或者你可以自定义一些方法。

  // 自定义方法。
  // 参见: https://levelup.gitconnected.com/floating-point-arithmetic-issue-in-dart-189ccc1a78e8
  */
  print(0.3.toString()); // 0.3
  print((0.2 + 0.1).toString()); // 0.30000000000000004
  print(f28.formatWithCondition(0.3)); // 0.30
  print(f28.formatWithCondition(0.2 + 0.1)); // 0.30
  print(f28.formatWithCondition(0.2 + 0.1, ceil: true)); // 0.30000001

  /// Decimal 是可以的
  final d1 = Decimal.fromInt(1);
  print(f22.formatDecimalWithCondition(d1)); // 1.00
  print(f22.formatDecimalWithCondition(d1, floor: true)); // 1.00
  print(f22.formatDecimalWithCondition(d1, ceil: true)); // 1.00
  print(f28.formatDecimalWithCondition(d1)); // 1.00
  print(f28.formatDecimalWithCondition(d1, floor: true)); // 1.00
  print(f28.formatDecimalWithCondition(d1, ceil: true)); // 1.00

  final d1_19 = Decimal.parse('1.111111111');
  print(f22.formatDecimalWithCondition(d1_19)); // 1.11
  print(f22.formatDecimalWithCondition(d1_19, floor: true)); // 1.11
  print(f22.formatDecimalWithCondition(d1_19, ceil: true)); // 1.12
  print(f28.formatDecimalWithCondition(d1_19)); // 1.11111111
  print(f28.formatDecimalWithCondition(d1_19, floor: true)); // 1.11111111
  print(f28.formatDecimalWithCondition(d1_19, ceil: true)); // 1.11111112

  final d1_08_1 = Decimal.parse('1.000000001');
  print(f22.formatDecimalWithCondition(d1_08_1)); // 1.00
  print(f22.formatDecimalWithCondition(d1_08_1, floor: true)); // 1.00
  print(f22.formatDecimalWithCondition(d1_08_1, ceil: true)); // 1.01
  print(f28.formatDecimalWithCondition(d1_08_1)); // 1.00
  print(f28.formatDecimalWithCondition(d1_08_1, floor: true)); // 1.00
  print(f28.formatDecimalWithCondition(d1_08_1, ceil: true)); // 1.00000001

  final d1_99 = Decimal.parse('1.999999999');
  print(f22.formatDecimalWithCondition(d1_99)); // 2.00
  print(f22.formatDecimalWithCondition(d1_99, floor: true)); // 1.99
  print(f22.formatDecimalWithCondition(d1_99, ceil: true)); // 2.00
  print(f28.formatDecimalWithCondition(d1_99)); // 2.00
  print(f28.formatDecimalWithCondition(d1_99, floor: true)); // 1.99999999
  print(f28.formatDecimalWithCondition(d1_99, ceil: true)); // 2.00
}

更多关于Flutter数字格式化插件number_format_ext的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter数字格式化插件number_format_ext的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用number_format_ext插件来格式化数字的示例代码。number_format_ext是一个用于数字格式化的Flutter插件,支持多种货币和千位分隔符等格式化选项。

首先,确保你已经在pubspec.yaml文件中添加了number_format_ext依赖:

dependencies:
  flutter:
    sdk: flutter
  number_format_ext: ^最新版本号  # 请替换为当前最新版本号

然后运行flutter pub get来安装依赖。

接下来,你可以在你的Flutter项目中使用这个插件。以下是一个简单的示例,展示如何使用NumberFormatExt类来格式化数字:

import 'package:flutter/material.dart';
import 'package:number_format_ext/number_format_ext.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Number Format Ext Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // 示例数字
    double number = 1234567.89;

    // 使用NumberFormatExt格式化数字
    NumberFormatExt numberFormatExt = NumberFormatExt();

    // 格式化为千位分隔符
    String formattedNumber = numberFormatExt.formatNumber(number, locale: 'en_US');

    // 格式化为货币(例如美元)
    String formattedCurrency = numberFormatExt.formatCurrency(number, locale: 'en_US', symbol: '\$');

    // 格式化为百分比
    String formattedPercentage = numberFormatExt.formatPercentage(number / 100, locale: 'en_US');

    return Scaffold(
      appBar: AppBar(
        title: Text('Number Format Ext Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Text('原始数字: $number'),
            SizedBox(height: 16),
            Text('千位分隔符格式化: $formattedNumber'),
            SizedBox(height: 16),
            Text('货币格式化 (美元): $formattedCurrency'),
            SizedBox(height: 16),
            Text('百分比格式化: $formattedPercentage'),
          ],
        ),
      ),
    );
  }
}

在这个示例中,我们:

  1. 创建了一个简单的Flutter应用。
  2. 使用NumberFormatExt类来格式化一个示例数字。
  3. 将数字格式化为千位分隔符、货币(美元)和百分比。
  4. 在UI中显示了原始数字和格式化后的数字。

你可以根据需要调整locale和其他参数,以满足不同地区的数字格式要求。希望这个示例能帮你更好地理解和使用number_format_ext插件。

回到顶部