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