dart 中的货币格式

问题描述 投票:0回答:10

在 C# 中我可以做到:

12341.4.ToString("##,#0.00")

结果是 12,345.40

dart 中的等价物是什么?

formatting dart
10个回答
140
投票

我也想找到解决方案,发现它现在按照以下示例实现。

import 'package:intl/intl.dart';

final oCcy = new NumberFormat("#,##0.00", "en_US");

void main () {

  print("Eg. 1: ${oCcy.format(123456789.75)}");
  print("Eg. 2: ${oCcy.format(.7)}");
  print("Eg. 3: ${oCcy.format(12345678975/100)}");
  print("Eg. 4: ${oCcy.format(int.parse('12345678975')/100)}");
  print("Eg. 5: ${oCcy.format(double.parse('123456789.75'))}");

/* Output :  

Eg. 1: 123,456,789.75
Eg. 2: 0.70
Eg. 3: 123,456,789.75
Eg. 4: 123,456,789.75
Eg. 5: 123,456,789.75


 pubspec.yaml :

  name: testCcy002
  version: 0.0.1
  author: BOH
  description: Test Currency Format from intl.
  dev_dependencies:
    intl: any

   Run pub install to install "intl"  
*/
}

49
投票

这是一个 flutter 实现的示例:

import 'package:intl/intl.dart';

final formatCurrency = new NumberFormat.simpleCurrency();

new Expanded(
            child: new Center(
                child: new Text('${formatCurrency.format(_moneyCounter)}',
                  style: new TextStyle(
                    color: Colors.greenAccent,
                    fontSize: 46.9,
                    fontWeight: FontWeight.w800)))),

例如,结果为 $#,###.## 或 $4,100.00。

注意 Text('${... 中的 $ 只是引用 ' ' 内的变量 _moneyCounter ,与格式化结果中添加的 $ 无关。


25
投票

如果您不想打印货币符号:

import 'package:intl/intl.dart';

var noSimbolInUSFormat = new NumberFormat.currency(locale: "en_US",
      symbol: "");

10
投票

我是dart包money2的作者

https://pub.dev/packages/money2

该软件包支持固定精度的数学、货币格式和解析。

import 'money2.dart';

Currency usdCurrency = Currency.create('USD', 2);

// Create money from an int.
Money costPrice = Money.fromInt(1000, usdCurrency);
print(costPrice.toString());
  > $10.00

final taxInclusive = costPrice * 1.1;
print(taxInclusive.toString())
  > $11.00

print(taxInclusive.format('SCC #.00'));
  > $US 11.00

// Create money from an String using the `Currency` instance.
Money parsed = usdCurrency.parse(r'$10.00');
print(parsed.format('SCCC 0.0'));
  > $USD 10.00

// Create money from an int which contains the MajorUnit (e.g dollars)
Money buyPrice = Money.from(10);
print(buyPrice.toString());
  > $10.00

// Create money from a double which contains Major and Minor units (e.g. dollars and cents)
// We don't recommend transporting money as a double as you will get rounding errors.
Money sellPrice = Money.from(10.50);
print(sellPrice.toString());
  > $10.50

8
投票
var number = 10000;

final NumberFormat usCurrency = NumberFormat('#,##0', 'en_US');

print(' \$${usCurrency.format(number))}');

--

$10,000

如果您想在数字末尾写分:

final NumberFormat usCurrency = NumberFormat('#,##0.00', 'en_US');

--

$10,000.00


5
投票

我用它。它对我有用

class MoneyFormat {
 String price;

 String moneyFormat(String price) {
  if (price.length > 2) {
  var value = price;
  value = value.replaceAll(RegExp(r'\D'), '');
  value = value.replaceAll(RegExp(r'\B(?=(\d{3})+(?!\d))'), ',');
  return value;
  }
 }
}

在 TextFormField 中

onChanged: (text) {
 priceController.text = moneyFormat.moneyFormat(priceController.text);
}

3
投票

感谢@Richard Morgan(答案上面

这是我最终的解决方案。

注意:您需要这两个套餐才能使用其他货币。 另外,请检查您使用的数据类型,以确定是否要使用

int
而不是
String
。如果
int
则无需在
int.parse()
 中使用 
format()

轻松检查

print(amount.runtimeType);

    //packages
    import 'dart:io';
    import 'package:intl/intl.dart';

    final formatCurrency = NumberFormat.simpleCurrency(
          locale: Platform.localeName, name: 'NGN');
    
    final int amount;
   // or final String amount; if gotten from json file 
   // check what type of data with - print(data.runtimeType);

   //generate your constructors for final fields
   Text(
         '${formatCurrency.format(amount)}',
          // or for String '${formatCurrency.format(int.parse(amount))}' 
            style: TextStyle(
              color: Colors.white,
              fontSize: 16,
            ),
       ),
    

0
投票
import 'package:intl/intl.dart';

extension DoubleExt on double {
  String toEuro() {
    return NumberFormat.simpleCurrency(
      name: 'EUR',
    ).format(this / 100);
  }

  String toPln() {
    return NumberFormat.simpleCurrency(
      name: 'PLN',
    ).format(this / 100);
  }
}

只需在您的替身上使用它即可。

1000.0.toEuro()
=>
€10.00


0
投票
import 'package:intl/intl.dart';

final oCcy = NumberFormat.currency(
  locale: 'eu',
  customPattern: '#,### \u00a4',
  symbol: 'FCFA',
  decimalDigits: 2);

print(oCcy.format(12345)) // 12.345,00 FCFA

0
投票

我写了一个函数来像金钱一样显示双精度数。请随意使用它。 导入 'dart:math';

extension DoubleExtension on double {
  String displayLikeMoney({bool dollarSign = true}) {
    String number = roundedPrecisionToString(2, trailingZeros: true);
    List<String> parts = number.split('.');
    String dollars = parts[0];
    String cents = parts.length > 1 ? parts[1] : '';
    String formattedDollars = '';
    for (int i = 0; i < dollars.length; i++) {
      int position = dollars.length - i;
      if (position != dollars.length && position % 3 == 0) {
        formattedDollars += ',';
      }
      formattedDollars += dollars[i];
    }
    String money =
        cents.isNotEmpty ? '$formattedDollars.$cents' : formattedDollars;
    return dollarSign ? '\$ $money' : money;
  }

  /// good for string output because it can remove trailing zeros
  /// and sometimes periods. Or optionally display the exact number of trailing zeros
  String roundedPrecisionToString(int places, {bool trailingZeros = false}) {
    double mod = pow(10.0, places) as double;
    double round = ((this * mod).round().toDouble() / mod);
    String doubleToString =
        trailingZeros ? round.toStringAsFixed(places) : round.toString();
    if (!trailingZeros) {
      RegExp trailingZeros = RegExp(r'^[0-9]+.0+$');
      if (trailingZeros.hasMatch(doubleToString)) {
        doubleToString = doubleToString.split('.')[0];
      }
    }
    return doubleToString;
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.