省道货币格式

在 C # 中,我可以做到:

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

结果是12,345.40

飞镖里的等价物是什么?

89300 次浏览

我也想找到解决方案,并且发现它现在已经按照下面的示例实现了。

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"
*/
}

下面是一个 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。

请注意,$in Text (’${ ... 只是引用’’中的变量 _ moneyCounter,与添加到格式化结果中的 $无关。

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

import 'package:intl/intl.dart';


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

我是 Dart 包裹钱2的作者

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

我用它,它对我有用

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);
}

感谢@Richard Morgan (回答 以上)

这是我最后的解决办法。

注意 : 您需要这两个包来使用其他货币。 另外,检查您使用的数据类型,以确定是否要使用 int而不是 String。如果 int那么就不需要在 format()中使用 int.parse()

方便地检查 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,
),
),
    

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);
}
}

用你的双倍

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
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