angular - 在 Angular 中将数字转换为单词

标签 angular

如何将数字转换为 Angular 单词

例如:“1232”到“一千二百三十二”

我是 Angular 新手,有人可以帮我解决这个问题吗?

最佳答案

您可以使用@thank-you here发布的算法并将其转换为管道。

Demo

import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
   name: 'numberToWords'
})
export class NumberToWordsPipe implements PipeTransform {
  transform(value: any): string {
    if (value && isInteger(value))
      return  numToWords(value);
    
    return value;
  }
}

const isInteger = function(x: any) {
   return x % 1 === 0;
}


const arr = x => Array.from(x);
const num = x => Number(x) || 0;
const str = x => String(x);
const isEmpty = xs => xs.length === 0;
const take = n => xs => xs.slice(0,n);
const drop = n => xs => xs.slice(n);
const reverse = xs => xs.slice(0).reverse();
const comp = f => g => x => f (g (x));
const not = x => !x;
const chunk = n => xs =>
  isEmpty(xs) ? [] : [take(n)(xs), ...chunk (n) (drop (n) (xs))];
// numToWords :: (Number a, String a) => a -> String
let numToWords = n => {
  let a = [
    '', 'one', 'two', 'three', 'four',
    'five', 'six', 'seven', 'eight', 'nine',
    'ten', 'eleven', 'twelve', 'thirteen', 'fourteen',
    'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen'
  ];
  let b = [
    '', '', 'twenty', 'thirty', 'forty',
    'fifty', 'sixty', 'seventy', 'eighty', 'ninety'
  ];
  let g = [
    '', 'thousand', 'million', 'billion', 'trillion', 'quadrillion',
    'quintillion', 'sextillion', 'septillion', 'octillion', 'nonillion'
  ];
  // this part is really nasty still
  // it might edit this again later to show how Monoids could fix this up
  let makeGroup = ([ones,tens,huns]) => {
    return [
      num(huns) === 0 ? '' : a[huns] + ' hundred ',
      num(ones) === 0 ? b[tens] : b[tens] && b[tens] + '-' || '',
      a[tens+ones] || a[ones]
    ].join('');
  };
  // "thousands" constructor; no real good names for this, i guess
  let thousand = (group,i) => group === '' ? group : `${group} ${g[i]}`;
  // execute !
  if (typeof n === 'number') return numToWords(String(n));
  if (n === '0')             return 'zero';
  return comp (chunk(3)) (reverse) (arr(n))
    .map(makeGroup)
    .map(thousand)
    .filter(comp(not)(isEmpty))
    .reverse()
    .join(' ');
};

关于angular - 在 Angular 中将数字转换为单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65051817/

相关文章:

隐藏容器中的 Angular Material 垫选项卡组不会显示溢出按钮,除非单击选定的选项卡

angular - 在模块上的 2 个 Angular 组件之间进行选择

javascript - ngSwitch 是 "Attribute Directive"还是 "Structural Directive"?

Angular 设置下拉选择选项作为迭代前的默认选择

android - 从移动浏览器扫描 Angular2+ 二维码

Angular 9 取消 HTTP 请求

angular - Angular2Dart Router.currentInstruction未设置

javascript - 如何将某些样式应用于 Angular Material 表中的表行

html - 如何限制内容可编辑的 <span> 行数?

node.js - 现有 Nodejs 应用程序上的 Angular2 页面