Skip to content

Instantly share code, notes, and snippets.

@anujgakhar
Created February 23, 2014 08:55
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anujgakhar/9168910 to your computer and use it in GitHub Desktop.
Save anujgakhar/9168910 to your computer and use it in GitHub Desktop.
A script that converts numbers to english words
class @NumberToWords
ones = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"]
tens = ["twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"]
scales = ["", "thousand", "million", "billion", "trillion", "quadrillion", "quintillion"]
convert: (num) ->
number = Math.abs(num)
return @check_negative(num, @convert_less_than_hundred number) if number < 100
return @check_negative(num, @convert_less_than_thousand number) if number < 1000
for n in [0..scales.length]
previousScale = n - 1
scaleValue = Math.pow(1000, n)
if scaleValue > number
previousScaleValue = Math.pow(1000, previousScale)
numberPart = parseInt(number / previousScaleValue, 10)
remainder = number - (numberPart * previousScaleValue)
word = @convert_less_than_thousand(numberPart) + " " + scales[previousScale]
if remainder > 0
word = word + ", " + @convert(remainder);
return @check_negative(num, word)
convert_less_than_hundred: (number) ->
return ones[number] if number < 20
for i in [0..tens.length]
tempVal = 20 + 10 * i
if tempVal + 10 > number
if (number % 10 != 0)
return tens[i] + " " + ones[number % 10]
return tens[i]
convert_less_than_thousand: (number) ->
word = ""
remainder = parseInt(number / 100, 10)
modulus = parseInt(number % 100, 10)
if remainder > 0
word = ones[remainder] + " hundred"
if modulus > 0
word = word + " "
if modulus > 0
word = word + @convert_less_than_hundred modulus
word
check_negative: (number, word) ->
return if number < 0 then "negative " + word else word
// Generated by CoffeeScript 1.7.1
(function() {
this.NumberToWords = (function() {
var ones, scales, tens;
function NumberToWords() {}
ones = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"];
tens = ["twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"];
scales = ["", "thousand", "million", "billion", "trillion", "quadrillion", "quintillion"];
NumberToWords.prototype.convert = function(num) {
var n, number, numberPart, previousScale, previousScaleValue, remainder, scaleValue, word, _i, _ref;
number = Math.abs(num);
if (number < 100) {
return this.check_negative(num, this.convert_less_than_hundred(number));
}
if (number < 1000) {
return this.check_negative(num, this.convert_less_than_thousand(number));
}
for (n = _i = 0, _ref = scales.length; 0 <= _ref ? _i <= _ref : _i >= _ref; n = 0 <= _ref ? ++_i : --_i) {
previousScale = n - 1;
scaleValue = Math.pow(1000, n);
if (scaleValue > number) {
previousScaleValue = Math.pow(1000, previousScale);
numberPart = parseInt(number / previousScaleValue, 10);
remainder = number - (numberPart * previousScaleValue);
word = this.convert_less_than_thousand(numberPart) + " " + scales[previousScale];
if (remainder > 0) {
word = word + ", " + this.convert(remainder);
}
return this.check_negative(num, word);
}
}
};
NumberToWords.prototype.convert_less_than_hundred = function(number) {
var i, tempVal, _i, _ref;
if (number < 20) {
return ones[number];
}
for (i = _i = 0, _ref = tens.length; 0 <= _ref ? _i <= _ref : _i >= _ref; i = 0 <= _ref ? ++_i : --_i) {
tempVal = 20 + 10 * i;
if (tempVal + 10 > number) {
if (number % 10 !== 0) {
return tens[i] + " " + ones[number % 10];
}
return tens[i];
}
}
};
NumberToWords.prototype.convert_less_than_thousand = function(number) {
var modulus, remainder, word;
word = "";
remainder = parseInt(number / 100, 10);
modulus = parseInt(number % 100, 10);
if (remainder > 0) {
word = ones[remainder] + " hundred";
if (modulus > 0) {
word = word + " ";
}
}
if (modulus > 0) {
word = word + this.convert_less_than_hundred(modulus);
}
return word;
};
NumberToWords.prototype.check_negative = function(number, word) {
if (number < 0) {
return "negative " + word;
} else {
return word;
}
};
return NumberToWords;
})();
}).call(this);
Copy link

ghost commented Oct 26, 2015

thus negating any security it provides. Therefore, we focus on making our machines and network as secure as possible.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment