Skip to content

Instantly share code, notes, and snippets.

@jgphilpott
Last active May 22, 2023 20:15
Show Gist options
  • Save jgphilpott/787659ac4ea57a9971da58a76191079b to your computer and use it in GitHub Desktop.
Save jgphilpott/787659ac4ea57a9971da58a76191079b to your computer and use it in GitHub Desktop.
A function for formatting raw numbers into legible strings.
# 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
// 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