var app = angular.module('app',[]); app.filter('words', function() { function isInteger(x) { return x % 1 === 0; } return function(value) { if (value && isInteger(value)) return toWords(value); return value; }; }); var th = ['','thousand','million', 'billion','trillion']; var dg = ['zero','one','two','three','four', 'five','six','seven','eight','nine']; var tn = ['ten','eleven','twelve','thirteen', 'fourteen','fifteen','sixteen', 'seventeen','eighteen','nineteen']; var tw = ['twenty','thirty','forty','fifty', 'sixty','seventy','eighty','ninety']; function toWords(s) { s = s.toString(); s = s.replace(/[\, ]/g,''); if (s != parseFloat(s)) return 'not a number'; var x = s.indexOf('.'); if (x == -1) x = s.length; if (x > 15) return 'too big'; var n = s.split(''); var str = ''; var sk = 0; for (var i=0; i < x; i++) { if ((xi)%3==2) { if (n[i] == '1') { str += tn[Number(n[i+1])] + ' '; i++; sk=1; } else if (n[i]!=0) { str += tw[n[i]-2] + ' '; sk=1; } } else if (n[i]!=0) { str += dg[n[i]] +' '; if ((xi)%3==0) str += 'hundred '; sk=1; } if ((xi)%3==1) { if (sk) str += th[(xi-1)/3] + ' '; sk=0; } } if (x != s.length) { var y = s.length; str += 'point '; for (var i=x+1; i<y; i++) str += dg[n[i]] +' '; } return str.replace(/\s+/g,' '); } window.toWords = toWords;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.js"></script> <div ng-app="app"> <input type="text" ng-model="name" /> {{name | words}} </div>