Skip to main content
Code Review

Return to Question

replaced http://codereview.stackexchange.com/ with https://codereview.stackexchange.com/
Source Link
edited tags
Link
RubberDuck
  • 31.1k
  • 6
  • 73
  • 176
Tweeted twitter.com/#!/StackCodeReview/status/496097940260536320
check out-of-range numbers, no more "undefinedillion"
Source Link
Dagg
  • 4.6k
  • 1
  • 25
  • 41
(function (global) {
 'use strict';

 var scalePrefix = ['m', 'b', 'tr', 'quadr', 'quint', 
 'sext', 'sept', 'oct', 'non', 'dec'];

 var digits = ['', 'one', 'two', 'three', 'four',
 'five', 'six', 'seven', 'eight', 'nine'];

 var tens = ['', 'ten', 'twenty', 'thirty', 'forty', 'fifty',
 'sixty', 'seventy', 'eighty', 'ninety'];

 var teens = { 0: 'ten', 1: 'eleven', 2: 'twelve', 
 3: 'thir', 5: 'fif', 8: 'eigh' };

 function nameDigit(digit) {
 return digits[digit];
 }

 function nameTenToNineteen(number) {
 var prefix = teens[number] || digits[number];

 return number < 3 ? prefix : prefix + 'teen';
 }

 function nameTripletScale(digitCount) {
 return digitCount < 3 ? '' :
 digitCount < 6 ? 'thousand' :
 scalePrefix[digitCount / 3 - 2] + 'illion';
 }

 function nameTripletHead(number) {
 return +number ? (nameDigit(number) + ' hundred') : '';
 }

 function nameTripletTail(digitPair) {
 var separator = +digitPair[1] ? '-' : '';

 return digitPair[0] == 0 ? nameDigit(digitPair[1]) :
 digitPair[0] == 1 ? nameTenToNineteen(digitPair[1]) :
 tens[digitPair[0]] + separator + digits[digitPair[1]];
 }

 function extractSymbols(number) {
 var symbols, digitCount;
 
 number = ('' + number);
 if (!number.match(/^(-?)[\d,]+/)) {
 throw new Error('invalid number: ' + number);
 }
 symbols return= number.replace(/,/g, '').split('');
 digitCount = symbols.length - (symbols[0] == '-');
 if (digitCount / 3 > scalePrefix.length + 2) {
 throw new Error('number out of range: ' + number);
 }
 return symbols;
 }

 function nameNumber(number) {
 var symbols = extractSymbols(number),
 sign = '',
 segments = [],
 segment;

 function append(item) {
 item && segments.push(item);
 }

 if (symbols[0] == '-') {
 sign = 'negative ';
 symbols.shift();
 }

 while(symbols.length % 3) {
 symbols.unshift(0);
 }

 while(symbols.length) {
 segment = symbols.splice(0, 3);
 append(nameTripletHead(segment[0]));
 append(nameTripletTail(segment.slice(1)));
 if (segment.join('') > 0) {
 append(nameTripletScale(symbols.length));
 }
 }

 return sign + (segments.join(' ') || 'zero');
 }

 global['nameNumber'] = nameNumber;
}(this));
(function (global) {
 'use strict';

 var scalePrefix = ['m', 'b', 'tr', 'quadr', 'quint', 
 'sext', 'sept', 'oct', 'non', 'dec'];

 var digits = ['', 'one', 'two', 'three', 'four',
 'five', 'six', 'seven', 'eight', 'nine'];

 var tens = ['', 'ten', 'twenty', 'thirty', 'forty', 'fifty',
 'sixty', 'seventy', 'eighty', 'ninety'];

 var teens = { 0: 'ten', 1: 'eleven', 2: 'twelve', 
 3: 'thir', 5: 'fif', 8: 'eigh' };

 function nameDigit(digit) {
 return digits[digit];
 }

 function nameTenToNineteen(number) {
 var prefix = teens[number] || digits[number];

 return number < 3 ? prefix : prefix + 'teen';
 }

 function nameTripletScale(digitCount) {
 return digitCount < 3 ? '' :
 digitCount < 6 ? 'thousand' :
 scalePrefix[digitCount / 3 - 2] + 'illion';
 }

 function nameTripletHead(number) {
 return +number ? (nameDigit(number) + ' hundred') : '';
 }

 function nameTripletTail(digitPair) {
 var separator = +digitPair[1] ? '-' : '';

 return digitPair[0] == 0 ? nameDigit(digitPair[1]) :
 digitPair[0] == 1 ? nameTenToNineteen(digitPair[1]) :
 tens[digitPair[0]] + separator + digits[digitPair[1]];
 }

 function extractSymbols(number) {
 number = ('' + number);
 if (!number.match(/^(-?)[\d,]+/)) {
 throw new Error('invalid number: ' + number);
 }
 return number.replace(/,/g, '').split('');
 }
 
 function nameNumber(number) {
 var symbols = extractSymbols(number),
 sign = '',
 segments = [],
 segment;

 function append(item) {
 item && segments.push(item);
 }

 if (symbols[0] == '-') {
 sign = 'negative ';
 symbols.shift();
 }

 while(symbols.length % 3) {
 symbols.unshift(0);
 }

 while(symbols.length) {
 segment = symbols.splice(0, 3);
 append(nameTripletHead(segment[0]));
 append(nameTripletTail(segment.slice(1)));
 if (segment.join('') > 0) {
 append(nameTripletScale(symbols.length));
 }
 }

 return sign + (segments.join(' ') || 'zero');
 }

 global['nameNumber'] = nameNumber;
}(this));
(function (global) {
 'use strict';
 var scalePrefix = ['m', 'b', 'tr', 'quadr', 'quint', 
 'sext', 'sept', 'oct', 'non', 'dec'];
 var digits = ['', 'one', 'two', 'three', 'four',
 'five', 'six', 'seven', 'eight', 'nine'];
 var tens = ['', 'ten', 'twenty', 'thirty', 'forty', 'fifty',
 'sixty', 'seventy', 'eighty', 'ninety'];
 var teens = { 0: 'ten', 1: 'eleven', 2: 'twelve', 
 3: 'thir', 5: 'fif', 8: 'eigh' };
 function nameDigit(digit) {
 return digits[digit];
 }
 function nameTenToNineteen(number) {
 var prefix = teens[number] || digits[number];
 return number < 3 ? prefix : prefix + 'teen';
 }
 function nameTripletScale(digitCount) {
 return digitCount < 3 ? '' :
 digitCount < 6 ? 'thousand' :
 scalePrefix[digitCount / 3 - 2] + 'illion';
 }
 function nameTripletHead(number) {
 return +number ? (nameDigit(number) + ' hundred') : '';
 }
 function nameTripletTail(digitPair) {
 var separator = +digitPair[1] ? '-' : '';
 return digitPair[0] == 0 ? nameDigit(digitPair[1]) :
 digitPair[0] == 1 ? nameTenToNineteen(digitPair[1]) :
 tens[digitPair[0]] + separator + digits[digitPair[1]];
 }
 function extractSymbols(number) {
 var symbols, digitCount;
 
 number = ('' + number);
 if (!number.match(/^(-?)[\d,]+/)) {
 throw new Error('invalid number: ' + number);
 }
 symbols = number.replace(/,/g, '').split('');
 digitCount = symbols.length - (symbols[0] == '-');
 if (digitCount / 3 > scalePrefix.length + 2) {
 throw new Error('number out of range: ' + number);
 }
 return symbols;
 }

 function nameNumber(number) {
 var symbols = extractSymbols(number),
 sign = '',
 segments = [],
 segment;
 function append(item) {
 item && segments.push(item);
 }
 if (symbols[0] == '-') {
 sign = 'negative ';
 symbols.shift();
 }
 while(symbols.length % 3) {
 symbols.unshift(0);
 }
 while(symbols.length) {
 segment = symbols.splice(0, 3);
 append(nameTripletHead(segment[0]));
 append(nameTripletTail(segment.slice(1)));
 if (segment.join('') > 0) {
 append(nameTripletScale(symbols.length));
 }
 }
 return sign + (segments.join(' ') || 'zero');
 }
 global['nameNumber'] = nameNumber;
}(this));
added 71 characters in body
Source Link
Dagg
  • 4.6k
  • 1
  • 25
  • 41
Loading
Rollback to Revision 2
Source Link
Dagg
  • 4.6k
  • 1
  • 25
  • 41
Loading
deleted 10 characters in body
Source Link
Dagg
  • 4.6k
  • 1
  • 25
  • 41
Loading
added 4 characters in body
Source Link
Dagg
  • 4.6k
  • 1
  • 25
  • 41
Loading
Source Link
Dagg
  • 4.6k
  • 1
  • 25
  • 41
Loading
default

AltStyle によって変換されたページ (->オリジナル) /