I have a value returned as a number, with could be decimal number e.g. "1.15".
However, I need to format all numbers in a range to a given fraction. For example, all numbers greater than 0 but less than .2 I want to return "1/8".
I already started to do this as a series of if/else statements, but I was wondering if there was a smarter and neater way.
if (amt > 0 && amt <= .2){
q = '1/8';
} else if (amt > .2 && amt <= .3){
q = '1/4';
} else if (amt > .3 && amt <= .4){
q = '1/3';
} else if (amt > .4 && amt <= .5){
q = '1/2';
} else if (amt > .5 && amt <= .7){
q = '2/3';
} else if (amt > .7 && amt <= .8){
q = '3/4';
} else if (amt > .8 && amt <= 1.0){
q = '7/8';
} else if (amt > 1 && amt <= 1.1){
q = '1';
} etc.....
Ratio.js has a function called
.toQuantityOf()
..toQuantityOf()
returns a new fraction after converting the current value of the fraction to it's approximate value based on the provided units. If multiple units are passed as arguments, then the closest match to the original value will be returned..toString()
returns the fraction as a string..toLocaleString()
will return mixed numbers if needed.Move your code into a function, and you can
return
from the correct branch and skip all theelse
statements, which cleans things up pretty dramatically:You can perform mathematical operations on
amt
to transform it to an integer value within a range, then use that as an index for an array lookup to get the fraction text.That can be simple if your ranges are equal, but since you have some 1/10th (0.3 to 0.4) and some 2/10ths (0.5 to 0.7) it's a little more complex, more than just multiply by 10.
amt
by 10 and get the integer partNB - That array is fixed - so is static