This my code:
function engineeringNotation(number) {
var space = ' ';
// Giga
if(number >= 1e10)
return (number / 1e9).toFixed(1) + space + 'G';
else if(number >= 1e9)
return (number / 1e8).toFixed(0) / 10 + space + 'G';
// Mega
else if(number >= 1e7)
return (number / 1e6).toFixed(1) + space + 'M';
else if(number >= 1e6)
return (number / 1e5).toFixed(0) / 10 + space + 'M';
// Kilo
else if(number >= 1e4)
return (number / 1e3).toFixed(1) + space + 'k';
else if(number >= 1e3)
return (number / 1e2).toFixed(0) / 10 + space + 'k';
// Unit
else if(number >= 1e1)
return (number / 1e0).toFixed(0) + space + '';
else
return (number / 1e-1).toFixed(0) / 10 + space + '';
}
Basically, it takes a number, and returns it in "engineering notation" to one decimal place. For example, 1234 becomes 1.2 k. I feel I'm repeating myself a lot. Can the above code be improved and DRYed out?
Just implementing (some of) Pointy's idea, this is not the most optimal approach, but it should get you started.
function engineeringNotation(number) {
var unitMap = {G:1e9,M:1e6,k:1e3};
var space = ' ';
for(var unit in unitMap) {
if(unitMap.hasOwnProperty(unit)) {
if(number >= unitMap[unit]*10) {
return (number / unitMap[unit]).toFixed(1) + space + unit;
}
if(number >= unitMap[unit]) {
return (number / unitMap[unit]/10).toFixed(0) / 10 + space + unit;
}
}
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With