Created
April 7, 2019 22:49
-
-
Save papandreou/71a79d4c32d4cefade6a678ce80fca46 to your computer and use it in GitHub Desktop.
CldrRbnfRuleSet bug in node-cldr
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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)); // åttahundraundefinedtusen noll |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment