Skip to content

Instantly share code, notes, and snippets.

@papandreou
Created April 7, 2019 22:49
Show Gist options
  • Save papandreou/71a79d4c32d4cefade6a678ce80fca46 to your computer and use it in GitHub Desktop.
Save papandreou/71a79d4c32d4cefade6a678ce80fca46 to your computer and use it in GitHub Desktop.
CldrRbnfRuleSet bug in node-cldr
function renderSpelloutNumbering(n) {
const isFractional = n !== Math.floor(n);
if (n < 0) return 'minus ' + this.renderSpelloutNumbering(-n);
if (isFractional && n > 1)
return (
this.renderSpelloutNumbering(Math.floor(n)) +
' komma ' +
this.renderSpelloutNumbering(parseInt(String(n).replace(/\d*\./, ''), 10))
);
if (n >= 1000000000000000000) return this.renderNumber(n, '#,##0');
if (n >= 2000000000000000)
return (
this.renderSpelloutCardinalReale(Math.floor(n / 1000000000000000)) +
' biljarder' +
(n === 2000000000000000
? ''
: ' ' + this.renderSpelloutNumbering(n % 1000000000000000))
);
if (n >= 1000000000000000)
return (
'en biljard' +
(n === 1000000000000000
? ''
: ' ' + this.renderSpelloutNumbering(n % 1000000000000000))
);
if (n >= 2000000000000)
return (
this.renderSpelloutCardinalReale(Math.floor(n / 1000000000000)) +
' biljoner' +
(n === 2000000000000
? ''
: ' ' + this.renderSpelloutNumbering(n % 1000000000000))
);
if (n >= 1000000000000)
return (
'en biljon' +
(n === 1000000000000
? ''
: ' ' + this.renderSpelloutNumbering(n % 1000000000000))
);
if (n >= 2000000000)
return (
this.renderSpelloutCardinalReale(Math.floor(n / 1000000000)) +
' miljarder' +
(n === 2000000000
? ''
: ' ' + this.renderSpelloutNumbering(n % 1000000000))
);
if (n >= 1000000000)
return (
'en miljard' +
(n === 1000000000
? ''
: ' ' + this.renderSpelloutNumbering(n % 1000000000))
);
if (n >= 2000000)
return (
this.renderSpelloutCardinalReale(Math.floor(n / 1000000)) +
' miljoner' +
(n === 2000000 ? '' : ' ' + this.renderSpelloutNumbering(n % 1000000))
);
if (n >= 1000000)
return (
'en miljon' +
(n === 1000000 ? '' : ' ' + this.renderSpelloutNumbering(n % 1000000))
);
if (n >= 1000)
return (
this.renderSpelloutNumberingT(Math.floor(n / 1000)) +
'\xADtusen' +
(n === 1000 ? '' : ' ' + this.renderSpelloutNumbering(n % 1000))
);
if (n >= 100)
return (
this.renderSpelloutNumbering(Math.floor(n / 100)) +
'\xADhundra' +
(n === 100 ? '' : '\xAD' + this.renderSpelloutNumbering(n % 100))
);
if (n >= 90)
return (
'nittio' + (n === 90 ? '' : '\xAD' + this.renderSpelloutNumbering(n % 10))
);
if (n >= 80)
return (
'åttio' + (n === 80 ? '' : '\xAD' + this.renderSpelloutNumbering(n % 10))
);
if (n >= 70)
return (
'sjuttio' +
(n === 70 ? '' : '\xAD' + this.renderSpelloutNumbering(n % 10))
);
if (n >= 60)
return (
'sextio' + (n === 60 ? '' : '\xAD' + this.renderSpelloutNumbering(n % 10))
);
if (n >= 50)
return (
'femtio' + (n === 50 ? '' : '\xAD' + this.renderSpelloutNumbering(n % 10))
);
if (n >= 40)
return (
'fyrtio' + (n === 40 ? '' : '\xAD' + this.renderSpelloutNumbering(n % 10))
);
if (n >= 30)
return (
'trettio' +
(n === 30 ? '' : '\xAD' + this.renderSpelloutNumbering(n % 10))
);
if (n >= 20)
return (
'tjugo' + (n === 20 ? '' : '\xAD' + this.renderSpelloutNumbering(n % 10))
);
if (n >= 19) return 'nitton';
if (n >= 18) return 'arton';
if (n >= 17) return 'sjutton';
if (n >= 16) return 'sexton';
if (n >= 15) return 'femton';
if (n >= 14) return 'fjorton';
if (n >= 13) return 'tretton';
if (n >= 12) return 'tolv';
if (n >= 11) return 'elva';
if (n >= 10) return 'tio';
if (n >= 9) return 'nio';
if (n >= 8) return 'åtta';
if (n >= 7) return 'sju';
if (n >= 6) return 'sex';
if (n >= 5) return 'fem';
if (n >= 4) return 'fyra';
if (n >= 3) return 'tre';
if (n >= 2) return 'två';
if (n >= 1) return 'ett';
return 'noll';
}
function renderSpelloutCardinalReale(n) {
const isFractional = n !== Math.floor(n);
if (n < 0) return 'minus ' + this.renderSpelloutCardinalReale(-n);
if (isFractional && n > 1)
return (
this.renderSpelloutCardinalReale(Math.floor(n)) +
' komma ' +
this.renderSpelloutCardinalReale(
parseInt(String(n).replace(/\d*\./, ''), 10)
)
);
if (n >= 1000000000000000000) return this.renderNumber(n, '#,##0');
if (n >= 2000000000000000)
return (
this.renderSpelloutCardinalReale(Math.floor(n / 1000000000000000)) +
' biljarder' +
(n === 2000000000000000
? ''
: ' ' + this.renderSpelloutCardinalReale(n % 1000000000000000))
);
if (n >= 1000000000000000)
return (
'en biljard' +
(n === 1000000000000000
? ''
: ' ' + this.renderSpelloutCardinalReale(n % 1000000000000000))
);
if (n >= 2000000000000)
return (
this.renderSpelloutCardinalReale(Math.floor(n / 1000000000000)) +
' biljoner' +
(n === 2000000000000
? ''
: ' ' + this.renderSpelloutCardinalReale(n % 1000000000000))
);
if (n >= 1000000000000)
return (
'en biljon' +
(n === 1000000000000
? ''
: ' ' + this.renderSpelloutCardinalReale(n % 1000000000000))
);
if (n >= 2000000000)
return (
this.renderSpelloutCardinalReale(Math.floor(n / 1000000000)) +
' miljarder' +
(n === 2000000000
? ''
: ' ' + this.renderSpelloutCardinalReale(n % 1000000000))
);
if (n >= 1000000000)
return (
'en miljard' +
(n === 1000000000
? ''
: ' ' + this.renderSpelloutCardinalReale(n % 1000000000))
);
if (n >= 2000000)
return (
this.renderSpelloutCardinalReale(Math.floor(n / 1000000)) +
' miljoner' +
(n === 2000000 ? '' : ' ' + this.renderSpelloutCardinalReale(n % 1000000))
);
if (n >= 1000000)
return (
'en miljon' +
(n === 1000000 ? '' : ' ' + this.renderSpelloutCardinalReale(n % 1000000))
);
if (n >= 2000)
return (
this.renderSpelloutCardinalReale(Math.floor(n / 1000)) +
'\xADtusen' +
(n === 2000 ? '' : ' ' + this.renderSpelloutCardinalReale(n % 1000))
);
if (n >= 1000)
return (
'ettusen' +
(n === 1000 ? '' : ' ' + this.renderSpelloutCardinalReale(n % 1000))
);
if (n >= 100)
return (
this.renderSpelloutCardinalNeuter(Math.floor(n / 100)) +
'\xADhundra' +
(n === 100 ? '' : '\xAD' + this.renderSpelloutCardinalReale(n % 100))
);
if (n >= 90)
return (
'nittio' +
(n === 90 ? '' : '\xAD' + this.renderSpelloutCardinalReale(n % 10))
);
if (n >= 80)
return (
'åttio' +
(n === 80 ? '' : '\xAD' + this.renderSpelloutCardinalReale(n % 10))
);
if (n >= 70)
return (
'sjuttio' +
(n === 70 ? '' : '\xAD' + this.renderSpelloutCardinalReale(n % 10))
);
if (n >= 60)
return (
'sextio' +
(n === 60 ? '' : '\xAD' + this.renderSpelloutCardinalReale(n % 10))
);
if (n >= 50)
return (
'femtio' +
(n === 50 ? '' : '\xAD' + this.renderSpelloutCardinalReale(n % 10))
);
if (n >= 40)
return (
'fyrtio' +
(n === 40 ? '' : '\xAD' + this.renderSpelloutCardinalReale(n % 10))
);
if (n >= 30)
return (
'trettio' +
(n === 30 ? '' : '\xAD' + this.renderSpelloutCardinalReale(n % 10))
);
if (n >= 20)
return (
'tjugo' +
(n === 20 ? '' : '\xAD' + this.renderSpelloutCardinalReale(n % 10))
);
if (n >= 2) return this.renderSpelloutNumbering(n);
if (n >= 1) return 'en';
return 'noll';
}
function renderSpelloutNumberingT(n) {
if (n >= 1000) return 'ERROR';
if (n >= 100)
return (
this.renderSpelloutNumbering(Math.floor(n / 100)) +
'\xADhundra' +
(n === 100 ? '' : '\xAD' + this.renderSpelloutNumberingT(n % 100))
);
if (n >= 90)
return (
'nittio' +
(n === 90 ? '' : '\xAD' + this.renderSpelloutNumberingT(n % 10))
);
if (n >= 80)
return (
'åttio' + (n === 80 ? '' : '\xAD' + this.renderSpelloutNumberingT(n % 10))
);
if (n >= 70)
return (
'sjuttio' +
(n === 70 ? '' : '\xAD' + this.renderSpelloutNumberingT(n % 10))
);
if (n >= 60)
return (
'sextio' +
(n === 60 ? '' : '\xAD' + this.renderSpelloutNumberingT(n % 10))
);
if (n >= 50)
return (
'femtio' +
(n === 50 ? '' : '\xAD' + this.renderSpelloutNumberingT(n % 10))
);
if (n >= 40)
return (
'fyrtio' +
(n === 40 ? '' : '\xAD' + this.renderSpelloutNumberingT(n % 10))
);
if (n >= 30)
return (
'trettio' +
(n === 30 ? '' : '\xAD' + this.renderSpelloutNumberingT(n % 10))
);
if (n >= 20)
return (
'tjugo' + (n === 20 ? '' : '\xAD' + this.renderSpelloutNumberingT(n % 10))
);
if (n >= 19) return 'nitton';
if (n >= 18) return 'arton';
if (n >= 17) return 'sjutton';
if (n >= 16) return 'sexton';
if (n >= 15) return 'femton';
if (n >= 14) return 'fjorton';
if (n >= 13) return 'tretton';
if (n >= 12) return 'tolv';
if (n >= 11) return 'elva';
if (n >= 10) return 'tio';
if (n >= 9) return 'nio';
if (n >= 8) return 'åtta';
if (n >= 7) return 'sju';
if (n >= 6) return 'sex';
if (n >= 5) return 'fem';
if (n >= 4) return 'fyra';
if (n >= 3) return 'tre';
if (n >= 2) return 'två';
if (n >= 1) return 'et';
}
function renderSpelloutCardinalNeuter(n) {
return this.renderSpelloutNumbering(n);
}
const sv = {
renderNumber: String,
renderSpelloutCardinalNeuter,
renderSpelloutNumbering,
renderSpelloutNumberingT,
renderSpelloutCardinalReale
};
console.log(sv.renderSpelloutCardinalNeuter(800000)); // åtta­hundra­undefined­tusen noll
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment