我一直在努力将这个数字转换成我自己的货币数字风格.例如,我有很多这样的东西.

99,99,99,99,99,999

我需要把它们转换成像这样的词

Ninety nine Kharba Ninety nine Arba Ninety nine crore Ninety nine Lakhs Ninety nine thousand Nine hundred and Ninety nine.

我试着使用number_to_character套餐,但我得到了英语货币格式的单词.

我try 的方法如下:

 var converter = NumberToCharacterConverter('en');
   converter.convertInt(int.parse(amountController.text));
    words=words[0]+words.substring(1);

我得了nine trillion nine hundred and ninety nine billion nine hundred and ninety nine million nine hundred and ninety nine thousand nine hundred and ninety nine

此外,我try 了从intlLocale NumberFormat,但我得到了INR10LCr,同样我上面提到的金额,它也没有我预期的解决方案.

我怎么才能把数字转换成上面提到的单词呢?

推荐答案

这是一个to-words的精简版本,取自"脚本世界".

String convert(int number) {
  final isNegativeNumber = number < 0;
  if (isNegativeNumber) {
    number = number.abs();
  }

  final words = <String>[];
  final match =
      numberWordsMapping.entries.firstWhere((entry) => number >= entry.key);
  if (number < 100) {
    words.add(match.value);
    number -= match.key;
    if (number > 0) {
      words.add(convert(number));
    }
  } else {
    final quotient = number ~/ match.key;
    final remainder = number % match.key;
    words
      ..add(convert(quotient))
      ..add(match.value);

    if (remainder > 0) {
      words.add(convert(remainder));
    }
  }

  if (isNegativeNumber) words.insert(0, 'Minus');
  return words.join(' ');
}


const numberWordsMapping = {
  100000000000: 'Kharba',
  1000000000: 'Arba',
  10000000: 'Crore',
  100000: 'Lakh',
  1000: 'Thousand',
  100: 'Hundred',
  90: 'Ninety',
  80: 'Eighty',
  70: 'Seventy',
  60: 'Sixty',
  50: 'Fifty',
  40: 'Forty',
  30: 'Thirty',
  20: 'Twenty',
  19: 'Nineteen',
  18: 'Eighteen',
  17: 'Seventeen',
  16: 'Sixteen',
  15: 'Fifteen',
  14: 'Fourteen',
  13: 'Thirteen',
  12: 'Twelve',
  11: 'Eleven',
  10: 'Ten',
  9: 'Nine',
  8: 'Eight',
  7: 'Seven',
  6: 'Six',
  5: 'Five',
  4: 'Four',
  3: 'Three',
  2: 'Two',
  1: 'One',
  0: 'Zero',
};

OUTPUT

1 = One
10 = Ten
12 = Twelve
30 = Thirty
42 = Forty Two
99 = Ninety Nine
111 = One Hundred Eleven
101 = One Hundred One
100 = One Hundred
999 = Nine Hundred Ninety Nine
1000 = One Thousand
1001 = One Thousand One
9990 = Nine Thousand Nine Hundred Ninety Nine
10000 = Ten Thousand
10042 = Ten Thousand Forty Two
9999999999999 = Ninety Nine Kharba Ninety Nine Arba Ninety Nine Crore Ninety Nine Lakh Ninety Nine Thousand Nine Hundred Ninety Nine

Flutter相关问答推荐

我如何才能收到每天重复的预定通知?

自定义ItemBuilderFlutter

如何在Firebase项目中更改包名称和包ID

Flutter 对齐:不适用于多行文字

就像Flutter 中的头文件一样?

Flutter卡内容未在水平列表视图中居中

谷歌 map 在 flutter 应用程序中显示错误的当前位置

如何在flutter中实现这样的底部导航栏?

在Flutter中为容器实现线性渐变背景动画

如何正确地将 PageView 设置为 AppBar 的标题?

为什么 ref.watch(otherProvider.stream) 在 Riverpod 2.x 中被弃用并且将在 3.x 中被删除?

当项目较少时收缩列表视图

flutter 中 // 和 /// 有什么区别

在 Flutter 中读取 Firebase 数据库数据时遇到问题

容器在发布模式下显示灰色框(抖动)

Firebase Cloud Messaging (Flutter):订阅主题时出现错误消息

使用 Chaquopy 插件后 Gradle Sync 无法正常工作

TextSpan 避免符号字符串组上的换行符

更新未知文档 ID firebase\flutter 中的字段

Flutter:整个判断整个应用生命周期的通用类