feat(general): add typesafe romanize utility
This commit is contained in:
@@ -32,3 +32,22 @@ export function concatStatsArray<T extends Record<string, number>>(keys: (keyof
|
||||
}
|
||||
return base as T
|
||||
}
|
||||
|
||||
export function romanize(num: number): string {
|
||||
if (!Number.isFinite(num)) return "NaN"
|
||||
const digits = Math.trunc(num).toString().split("")
|
||||
const key = [
|
||||
"","C","CC","CCC","CD","D","DC","DCC","DCCC","CM",
|
||||
"","X","XX","XXX","XL","L","LX","LXX","LXXX","XC",
|
||||
"","I","II","III","IV","V","VI","VII","VIII","IX"
|
||||
] as const
|
||||
|
||||
let roman = ""
|
||||
let i = 3
|
||||
while (i--) {
|
||||
const idx = Number(digits.pop()) + i * 10
|
||||
roman = (key[idx] || "") + roman
|
||||
}
|
||||
const thousands = Number(digits.join(""))
|
||||
return "M".repeat(thousands) + roman
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user