Last active
May 22, 2023 20:15
-
-
Save jgphilpott/787659ac4ea57a9971da58a76191079b to your computer and use it in GitHub Desktop.
A function for formatting raw numbers into legible strings.
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
# Requirement: https://gist.github.com/jgphilpott/12783015d68e056e54252355d75b41a9 | |
format = (number, category = null, unit = null, floatMax = 2, floatMin = 0, lang = "en-US") -> | |
if (typeof number == "number") | |
switch category | |
when "angle" | |
number = number.toLocaleString(lang, {maximumFractionDigits: floatMax, minimumFractionDigits: floatMin}) | |
if abbreviations[category][unit]? | |
return number + (if unit == "milliradian" || unit == "radian" then " " else "") + abbreviations[category][unit] | |
else | |
return number | |
when "area" | |
number = number.toLocaleString(lang, {maximumFractionDigits: floatMax, minimumFractionDigits: floatMin}) | |
if abbreviations[category][unit]? | |
return number + " " + abbreviations[category][unit] | |
else | |
return number | |
when "currency" | |
try | |
return number.toLocaleString(lang, {style: "currency", currency: unit, maximumFractionDigits: floatMax, minimumFractionDigits: floatMin}) | |
catch error | |
return number.toLocaleString(lang, {maximumFractionDigits: floatMax, minimumFractionDigits: floatMin}) | |
when "data" | |
number = number.toLocaleString(lang, {maximumFractionDigits: floatMax, minimumFractionDigits: floatMin}) | |
if abbreviations[category][unit]? | |
return number + " " + abbreviations[category][unit] | |
else | |
number = Math.abs number | |
if (number == 1) | |
return (number).toLocaleString(lang, {maximumFractionDigits: floatMax, minimumFractionDigits: floatMin}) + " byte" | |
else if (number < Math.pow 10, 3) | |
return (number / Math.pow 10, 0).toLocaleString(lang, {maximumFractionDigits: floatMax, minimumFractionDigits: floatMin}) + " bytes" | |
else if (number < Math.pow 10, 6) | |
return (number / Math.pow 10, 3).toLocaleString(lang, {maximumFractionDigits: floatMax, minimumFractionDigits: floatMin}) + " KB" | |
else if (number < Math.pow 10, 9) | |
return (number / Math.pow 10, 6).toLocaleString(lang, {maximumFractionDigits: floatMax, minimumFractionDigits: floatMin}) + " MB" | |
else if (number < Math.pow 10, 12) | |
return (number / Math.pow 10, 9).toLocaleString(lang, {maximumFractionDigits: floatMax, minimumFractionDigits: floatMin}) + " GB" | |
else if (number < Math.pow 10, 15) | |
return (number / Math.pow 10, 12).toLocaleString(lang, {maximumFractionDigits: floatMax, minimumFractionDigits: floatMin}) + " TB" | |
else if (number < Math.pow 10, 18) | |
return (number / Math.pow 10, 15).toLocaleString(lang, {maximumFractionDigits: floatMax, minimumFractionDigits: floatMin}) + " PB" | |
else if (number < Math.pow 10, 21) | |
return (number / Math.pow 10, 18).toLocaleString(lang, {maximumFractionDigits: floatMax, minimumFractionDigits: floatMin}) + " EB" | |
else if (number < Math.pow 10, 24) | |
return (number / Math.pow 10, 21).toLocaleString(lang, {maximumFractionDigits: floatMax, minimumFractionDigits: floatMin}) + " ZB" | |
else if (number < Math.pow 10, 27) | |
return (number / Math.pow 10, 24).toLocaleString(lang, {maximumFractionDigits: floatMax, minimumFractionDigits: floatMin}) + " YB" | |
# More info: https://www.geeksforgeeks.org/understanding-file-sizes-bytes-kb-mb-gb-tb-pb-eb-zb-yb | |
when "density" | |
number = number.toLocaleString(lang, {maximumFractionDigits: floatMax, minimumFractionDigits: floatMin}) | |
if abbreviations[category][unit]? | |
return number + " " + abbreviations[category][unit] | |
else | |
return number | |
when "energy" | |
number = number.toLocaleString(lang, {maximumFractionDigits: floatMax, minimumFractionDigits: floatMin}) | |
if abbreviations[category][unit]? | |
return number + " " + abbreviations[category][unit] | |
else | |
return number | |
when "frequency" | |
number = number.toLocaleString(lang, {maximumFractionDigits: floatMax, minimumFractionDigits: floatMin}) | |
if abbreviations[category][unit]? | |
return number + " " + abbreviations[category][unit] | |
else | |
return number | |
when "illumination" | |
number = number.toLocaleString(lang, {maximumFractionDigits: floatMax, minimumFractionDigits: floatMin}) | |
if abbreviations[category][unit]? | |
return number + " " + abbreviations[category][unit] | |
else | |
return number | |
when "length" | |
number = number.toLocaleString(lang, {maximumFractionDigits: floatMax, minimumFractionDigits: floatMin}) | |
if abbreviations[category][unit]? | |
return number + " " + abbreviations[category][unit] | |
else | |
return number | |
when "magnetomotive" | |
number = number.toLocaleString(lang, {maximumFractionDigits: floatMax, minimumFractionDigits: floatMin}) | |
if abbreviations[category][unit]? | |
return number + " " + abbreviations[category][unit] | |
else | |
return number | |
when "mass" | |
number = number.toLocaleString(lang, {maximumFractionDigits: floatMax, minimumFractionDigits: floatMin}) | |
if abbreviations[category][unit]? | |
return number + " " + abbreviations[category][unit] | |
else | |
return number | |
when "math" | |
number = number.toLocaleString(lang, {maximumFractionDigits: floatMax, minimumFractionDigits: floatMin}) | |
if abbreviations[category][unit]? | |
return number + " " + abbreviations[category][unit] | |
else | |
return number | |
when "oodles" | |
number = number.toLocaleString(lang, {maximumFractionDigits: floatMax, minimumFractionDigits: floatMin}) | |
if abbreviations[category][unit]? | |
return number + " " + abbreviations[category][unit] | |
else | |
number = Number number | |
if (Math.abs(number) < Math.pow 10, 3) | |
return (number / Math.pow 10, 0).toLocaleString(lang, {maximumFractionDigits: floatMax, minimumFractionDigits: floatMin}) | |
else if (Math.abs(number) < Math.pow 10, 6) | |
return (number / Math.pow 10, 3).toLocaleString(lang, {maximumFractionDigits: floatMax, minimumFractionDigits: floatMin}) + " K" | |
else if (Math.abs(number) < Math.pow 10, 9) | |
return (number / Math.pow 10, 6).toLocaleString(lang, {maximumFractionDigits: floatMax, minimumFractionDigits: floatMin}) + " M" | |
else if (Math.abs(number) < Math.pow 10, 12) | |
return (number / Math.pow 10, 9).toLocaleString(lang, {maximumFractionDigits: floatMax, minimumFractionDigits: floatMin}) + " B" | |
else if (Math.abs(number) < Math.pow 10, 15) | |
return (number / Math.pow 10, 12).toLocaleString(lang, {maximumFractionDigits: floatMax, minimumFractionDigits: floatMin}) + " T" | |
else if (Math.abs(number) < Math.pow 10, 18) | |
return (number / Math.pow 10, 15).toLocaleString(lang, {maximumFractionDigits: floatMax, minimumFractionDigits: floatMin}) + " Qa" | |
else if (Math.abs(number) < Math.pow 10, 21) | |
return (number / Math.pow 10, 18).toLocaleString(lang, {maximumFractionDigits: floatMax, minimumFractionDigits: floatMin}) + " Qi" | |
else if (Math.abs(number) < Math.pow 10, 24) | |
return (number / Math.pow 10, 21).toLocaleString(lang, {maximumFractionDigits: floatMax, minimumFractionDigits: floatMin}) + " Sx" | |
else if (Math.abs(number) < Math.pow 10, 27) | |
return (number / Math.pow 10, 24).toLocaleString(lang, {maximumFractionDigits: floatMax, minimumFractionDigits: floatMin}) + " Sp" | |
else if (Math.abs(number) < Math.pow 10, 30) | |
return (number / Math.pow 10, 27).toLocaleString(lang, {maximumFractionDigits: floatMax, minimumFractionDigits: floatMin}) + " Oc" | |
# For more abbreviations look here: | |
# https://officespace.zendesk.com/hc/en-us/articles/115000593531-Scientific-Notation-Large-Numbers-Guide | |
when "pressure" | |
number = number.toLocaleString(lang, {maximumFractionDigits: floatMax, minimumFractionDigits: floatMin}) | |
if abbreviations[category][unit]? | |
return number + " " + abbreviations[category][unit] | |
else | |
return number | |
when "radiation" | |
number = number.toLocaleString(lang, {maximumFractionDigits: floatMax, minimumFractionDigits: floatMin}) | |
if abbreviations[category][unit]? | |
return number + " " + abbreviations[category][unit] | |
else | |
return number | |
when "speed" | |
number = number.toLocaleString(lang, {maximumFractionDigits: floatMax, minimumFractionDigits: floatMin}) | |
if abbreviations[category][unit]? | |
return number + " " + abbreviations[category][unit] | |
else | |
return number | |
when "temperature" | |
number = number.toLocaleString(lang, {maximumFractionDigits: floatMax, minimumFractionDigits: floatMin}) | |
if abbreviations[category][unit]? | |
return number + " " + abbreviations[category][unit] | |
else | |
return number | |
when "time" | |
number = number.toLocaleString(lang, {maximumFractionDigits: floatMax, minimumFractionDigits: floatMin}) | |
if abbreviations[category][unit]? | |
return number + " " + abbreviations[category][unit] | |
else | |
return number | |
when "volume" | |
number = number.toLocaleString(lang, {maximumFractionDigits: floatMax, minimumFractionDigits: floatMin}) | |
if abbreviations[category][unit]? | |
return number + " " + abbreviations[category][unit] | |
else | |
return number | |
else | |
return number.toLocaleString(lang, {maximumFractionDigits: floatMax, minimumFractionDigits: floatMin}) | |
isInteger = (number) -> | |
if typeof number == "number" then number % 1 is 0 else false | |
isFloat = (number) -> | |
if typeof number == "number" then number % 1 isnt 0 else false |
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
// Requirement: https://gist.github.com/jgphilpott/12783015d68e056e54252355d75b41a9 | |
var format, isFloat, isInteger; | |
format = function(number, category = null, unit = null, floatMax = 2, floatMin = 0, lang = "en-US") { | |
var error; | |
if (typeof number === "number") { | |
switch (category) { | |
case "angle": | |
number = number.toLocaleString(lang, { | |
maximumFractionDigits: floatMax, | |
minimumFractionDigits: floatMin | |
}); | |
if (abbreviations[category][unit] != null) { | |
return number + (unit === "milliradian" || unit === "radian" ? " " : "") + abbreviations[category][unit]; | |
} else { | |
return number; | |
} | |
break; | |
case "area": | |
number = number.toLocaleString(lang, { | |
maximumFractionDigits: floatMax, | |
minimumFractionDigits: floatMin | |
}); | |
if (abbreviations[category][unit] != null) { | |
return number + " " + abbreviations[category][unit]; | |
} else { | |
return number; | |
} | |
break; | |
case "currency": | |
try { | |
return number.toLocaleString(lang, { | |
style: "currency", | |
currency: unit, | |
maximumFractionDigits: floatMax, | |
minimumFractionDigits: floatMin | |
}); | |
} catch (error1) { | |
error = error1; | |
return number.toLocaleString(lang, { | |
maximumFractionDigits: floatMax, | |
minimumFractionDigits: floatMin | |
}); | |
} | |
break; | |
case "data": | |
number = number.toLocaleString(lang, { | |
maximumFractionDigits: floatMax, | |
minimumFractionDigits: floatMin | |
}); | |
if (abbreviations[category][unit] != null) { | |
return number + " " + abbreviations[category][unit]; | |
} else { | |
number = Math.abs(number); | |
if (number === 1) { | |
return number.toLocaleString(lang, { | |
maximumFractionDigits: floatMax, | |
minimumFractionDigits: floatMin | |
}) + " byte"; | |
} else if (number < Math.pow(10, 3)) { | |
return (number / Math.pow(10, 0)).toLocaleString(lang, { | |
maximumFractionDigits: floatMax, | |
minimumFractionDigits: floatMin | |
}) + " bytes"; | |
} else if (number < Math.pow(10, 6)) { | |
return (number / Math.pow(10, 3)).toLocaleString(lang, { | |
maximumFractionDigits: floatMax, | |
minimumFractionDigits: floatMin | |
}) + " KB"; | |
} else if (number < Math.pow(10, 9)) { | |
return (number / Math.pow(10, 6)).toLocaleString(lang, { | |
maximumFractionDigits: floatMax, | |
minimumFractionDigits: floatMin | |
}) + " MB"; | |
} else if (number < Math.pow(10, 12)) { | |
return (number / Math.pow(10, 9)).toLocaleString(lang, { | |
maximumFractionDigits: floatMax, | |
minimumFractionDigits: floatMin | |
}) + " GB"; | |
} else if (number < Math.pow(10, 15)) { | |
return (number / Math.pow(10, 12)).toLocaleString(lang, { | |
maximumFractionDigits: floatMax, | |
minimumFractionDigits: floatMin | |
}) + " TB"; | |
} else if (number < Math.pow(10, 18)) { | |
return (number / Math.pow(10, 15)).toLocaleString(lang, { | |
maximumFractionDigits: floatMax, | |
minimumFractionDigits: floatMin | |
}) + " PB"; | |
} else if (number < Math.pow(10, 21)) { | |
return (number / Math.pow(10, 18)).toLocaleString(lang, { | |
maximumFractionDigits: floatMax, | |
minimumFractionDigits: floatMin | |
}) + " EB"; | |
} else if (number < Math.pow(10, 24)) { | |
return (number / Math.pow(10, 21)).toLocaleString(lang, { | |
maximumFractionDigits: floatMax, | |
minimumFractionDigits: floatMin | |
}) + " ZB"; | |
} else if (number < Math.pow(10, 27)) { | |
return (number / Math.pow(10, 24)).toLocaleString(lang, { | |
maximumFractionDigits: floatMax, | |
minimumFractionDigits: floatMin | |
}) + " YB"; | |
} | |
} | |
break; | |
// More info: https://www.geeksforgeeks.org/understanding-file-sizes-bytes-kb-mb-gb-tb-pb-eb-zb-yb | |
case "density": | |
number = number.toLocaleString(lang, { | |
maximumFractionDigits: floatMax, | |
minimumFractionDigits: floatMin | |
}); | |
if (abbreviations[category][unit] != null) { | |
return number + " " + abbreviations[category][unit]; | |
} else { | |
return number; | |
} | |
break; | |
case "energy": | |
number = number.toLocaleString(lang, { | |
maximumFractionDigits: floatMax, | |
minimumFractionDigits: floatMin | |
}); | |
if (abbreviations[category][unit] != null) { | |
return number + " " + abbreviations[category][unit]; | |
} else { | |
return number; | |
} | |
break; | |
case "frequency": | |
number = number.toLocaleString(lang, { | |
maximumFractionDigits: floatMax, | |
minimumFractionDigits: floatMin | |
}); | |
if (abbreviations[category][unit] != null) { | |
return number + " " + abbreviations[category][unit]; | |
} else { | |
return number; | |
} | |
break; | |
case "illumination": | |
number = number.toLocaleString(lang, { | |
maximumFractionDigits: floatMax, | |
minimumFractionDigits: floatMin | |
}); | |
if (abbreviations[category][unit] != null) { | |
return number + " " + abbreviations[category][unit]; | |
} else { | |
return number; | |
} | |
break; | |
case "length": | |
number = number.toLocaleString(lang, { | |
maximumFractionDigits: floatMax, | |
minimumFractionDigits: floatMin | |
}); | |
if (abbreviations[category][unit] != null) { | |
return number + " " + abbreviations[category][unit]; | |
} else { | |
return number; | |
} | |
break; | |
case "magnetomotive": | |
number = number.toLocaleString(lang, { | |
maximumFractionDigits: floatMax, | |
minimumFractionDigits: floatMin | |
}); | |
if (abbreviations[category][unit] != null) { | |
return number + " " + abbreviations[category][unit]; | |
} else { | |
return number; | |
} | |
break; | |
case "mass": | |
number = number.toLocaleString(lang, { | |
maximumFractionDigits: floatMax, | |
minimumFractionDigits: floatMin | |
}); | |
if (abbreviations[category][unit] != null) { | |
return number + " " + abbreviations[category][unit]; | |
} else { | |
return number; | |
} | |
break; | |
case "math": | |
number = number.toLocaleString(lang, { | |
maximumFractionDigits: floatMax, | |
minimumFractionDigits: floatMin | |
}); | |
if (abbreviations[category][unit] != null) { | |
return number + " " + abbreviations[category][unit]; | |
} else { | |
return number; | |
} | |
break; | |
case "oodles": | |
number = number.toLocaleString(lang, { | |
maximumFractionDigits: floatMax, | |
minimumFractionDigits: floatMin | |
}); | |
if (abbreviations[category][unit] != null) { | |
return number + " " + abbreviations[category][unit]; | |
} else { | |
number = Number(number); | |
if (Math.abs(number) < Math.pow(10, 3)) { | |
return (number / Math.pow(10, 0)).toLocaleString(lang, { | |
maximumFractionDigits: floatMax, | |
minimumFractionDigits: floatMin | |
}); | |
} else if (Math.abs(number) < Math.pow(10, 6)) { | |
return (number / Math.pow(10, 3)).toLocaleString(lang, { | |
maximumFractionDigits: floatMax, | |
minimumFractionDigits: floatMin | |
}) + " K"; | |
} else if (Math.abs(number) < Math.pow(10, 9)) { | |
return (number / Math.pow(10, 6)).toLocaleString(lang, { | |
maximumFractionDigits: floatMax, | |
minimumFractionDigits: floatMin | |
}) + " M"; | |
} else if (Math.abs(number) < Math.pow(10, 12)) { | |
return (number / Math.pow(10, 9)).toLocaleString(lang, { | |
maximumFractionDigits: floatMax, | |
minimumFractionDigits: floatMin | |
}) + " B"; | |
} else if (Math.abs(number) < Math.pow(10, 15)) { | |
return (number / Math.pow(10, 12)).toLocaleString(lang, { | |
maximumFractionDigits: floatMax, | |
minimumFractionDigits: floatMin | |
}) + " T"; | |
} else if (Math.abs(number) < Math.pow(10, 18)) { | |
return (number / Math.pow(10, 15)).toLocaleString(lang, { | |
maximumFractionDigits: floatMax, | |
minimumFractionDigits: floatMin | |
}) + " Qa"; | |
} else if (Math.abs(number) < Math.pow(10, 21)) { | |
return (number / Math.pow(10, 18)).toLocaleString(lang, { | |
maximumFractionDigits: floatMax, | |
minimumFractionDigits: floatMin | |
}) + " Qi"; | |
} else if (Math.abs(number) < Math.pow(10, 24)) { | |
return (number / Math.pow(10, 21)).toLocaleString(lang, { | |
maximumFractionDigits: floatMax, | |
minimumFractionDigits: floatMin | |
}) + " Sx"; | |
} else if (Math.abs(number) < Math.pow(10, 27)) { | |
return (number / Math.pow(10, 24)).toLocaleString(lang, { | |
maximumFractionDigits: floatMax, | |
minimumFractionDigits: floatMin | |
}) + " Sp"; | |
} else if (Math.abs(number) < Math.pow(10, 30)) { | |
return (number / Math.pow(10, 27)).toLocaleString(lang, { | |
maximumFractionDigits: floatMax, | |
minimumFractionDigits: floatMin | |
}) + " Oc"; | |
} | |
} | |
break; | |
// For more abbreviations look here: | |
// https://officespace.zendesk.com/hc/en-us/articles/115000593531-Scientific-Notation-Large-Numbers-Guide | |
case "pressure": | |
number = number.toLocaleString(lang, { | |
maximumFractionDigits: floatMax, | |
minimumFractionDigits: floatMin | |
}); | |
if (abbreviations[category][unit] != null) { | |
return number + " " + abbreviations[category][unit]; | |
} else { | |
return number; | |
} | |
break; | |
case "radiation": | |
number = number.toLocaleString(lang, { | |
maximumFractionDigits: floatMax, | |
minimumFractionDigits: floatMin | |
}); | |
if (abbreviations[category][unit] != null) { | |
return number + " " + abbreviations[category][unit]; | |
} else { | |
return number; | |
} | |
break; | |
case "speed": | |
number = number.toLocaleString(lang, { | |
maximumFractionDigits: floatMax, | |
minimumFractionDigits: floatMin | |
}); | |
if (abbreviations[category][unit] != null) { | |
return number + " " + abbreviations[category][unit]; | |
} else { | |
return number; | |
} | |
break; | |
case "temperature": | |
number = number.toLocaleString(lang, { | |
maximumFractionDigits: floatMax, | |
minimumFractionDigits: floatMin | |
}); | |
if (abbreviations[category][unit] != null) { | |
return number + " " + abbreviations[category][unit]; | |
} else { | |
return number; | |
} | |
break; | |
case "time": | |
number = number.toLocaleString(lang, { | |
maximumFractionDigits: floatMax, | |
minimumFractionDigits: floatMin | |
}); | |
if (abbreviations[category][unit] != null) { | |
return number + " " + abbreviations[category][unit]; | |
} else { | |
return number; | |
} | |
break; | |
case "volume": | |
number = number.toLocaleString(lang, { | |
maximumFractionDigits: floatMax, | |
minimumFractionDigits: floatMin | |
}); | |
if (abbreviations[category][unit] != null) { | |
return number + " " + abbreviations[category][unit]; | |
} else { | |
return number; | |
} | |
break; | |
default: | |
return number.toLocaleString(lang, { | |
maximumFractionDigits: floatMax, | |
minimumFractionDigits: floatMin | |
}); | |
} | |
} | |
}; | |
isInteger = function(number) { | |
if (typeof number === "number") { | |
return number % 1 === 0; | |
} else { | |
return false; | |
} | |
}; | |
isFloat = function(number) { | |
if (typeof number === "number") { | |
return number % 1 !== 0; | |
} else { | |
return false; | |
} | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment