如何在 Dart 中将数字格式化为千位分隔符

Shu*_*oni 7 format numbers dart dart-pub flutter

我必须在 dart 中将数字格式化为千位分隔符。我有这样的数字:

16987

13876

456786
Run Code Online (Sandbox Code Playgroud)

我想将它们格式化为:

16,987

13,876 

4,56,786
Run Code Online (Sandbox Code Playgroud)

小智 15

您可以使用 NumberFormat 在 ICU 格式化模式中传递自定义格式,请查看NumberFormat

import 'package:intl/intl.dart';

void main() {
  var formatter = NumberFormat('#,##,000');
  print(formatter.format(16987));
  print(formatter.format(13876));
  print(formatter.format(456786));
}
Run Code Online (Sandbox Code Playgroud)

输出

16,987
13,876
4,56,786
Run Code Online (Sandbox Code Playgroud)


Shu*_*oni 7

我发现intl包中的NumberFormat类非常有用,因为它提供了不同的方法来格式化数字。

默认情况下,NumberFormat 类使用默认的美国语言环境以百万为单位格式化数字,我们可以使用印度语言环境以十万为单位格式化数字(它可以根据任何国家/地区的语言环境格式化数字或货币)。NumberFormat.decimalPattern([String locale]).

import 'package:intl/intl.dart';   

void main() {
  NumberFormat numberFormat = NumberFormat.decimalPattern('hi');
  print(numberFormat.format(16987));
  print(numberFormat.format(13876));
  print(numberFormat.format(456786));
}
Run Code Online (Sandbox Code Playgroud)

输出

16,987
13,876
4,56,786
Run Code Online (Sandbox Code Playgroud)


小智 6

在执行此操作之前,您不需要使用 NumberFormat 包。这应该有帮助,用任何数字进行测试。

String formatAmount(){
    String price = "1000000000";
    String priceInText = "";
    int counter = 0;
    for(int i = (price.length - 1);  i >= 0; i--){
        counter++;
        String str = price[i];
        if((counter % 3) != 0 && i !=0){
          priceInText = "$str$priceInText";
        }else if(i == 0 ){
          priceInText = "$str$priceInText";
        
        }else{
          priceInText = ",$str$priceInText";
        }
    }
    return priceInText.trim();
  }
Run Code Online (Sandbox Code Playgroud)

然后你可以通过打印来使用:

print(formatAmount());
Run Code Online (Sandbox Code Playgroud)

输出:

 1,000,000,000
Run Code Online (Sandbox Code Playgroud)


ena*_*dun 5

如果您想要带小数的逗号分隔值,请使用decimalPatternDigits初始值设定项并通过参数控制小数位数decimalDigits

将参数值设置decimalDigits0将导致没有小数。

带小数

import 'package:intl/intl.dart';

NumberFormat formatter = NumberFormat.decimalPatternDigits(
    locale: 'en_us',
    decimalDigits: 2,
);

print(formatter.format(17459));
print(formatter.format(1000000));
print(formatter.format(100100.05));
print(formatter.format(100100.016));
Run Code Online (Sandbox Code Playgroud)

输出

17,459.00
1,000,000.00
100,100.05
100,100.02
Run Code Online (Sandbox Code Playgroud)

不带小数

import 'package:intl/intl.dart';

NumberFormat formatter = NumberFormat.decimalPatternDigits(
    locale: 'en_us',
    decimalDigits: 0,
);

print(formatter.format(100100.05));
print(formatter.format(100100.999));
Run Code Online (Sandbox Code Playgroud)

输出

100,100
100,101
Run Code Online (Sandbox Code Playgroud)