Я хочу округлить в соответствии с произвольным делением, например, я получаю число от 0 до 1, и я хочу округлить его в соответствии с делением на 48-е, например, если я получу что-то вроде 5/96, я хочу либо 2/48 или3/48.Какая хорошая формула для этого?
Так же, как с округлением до десятичных знаков.Если у вас есть n «деления» и номер x, сделайте round(x*n)/n. . В вашем примере это будет round((5/96)*48)/48 = round(2.5)/48 = 2/48
n
x
round(x*n)/n
round((5/96)*48)/48 = round(2.5)/48 = 2/48
round можно заменить на floorили ceil, в зависимости от желаемого направления.
round
floor
ceil
Предполагает целочисленное деление, поэтому оно будет округляться вниз:
float retVal = scaleRange(in, oldMin, oldMax, newMin, newMax) { return (in / ((oldMax - oldMin) / (48 - 0))) + 0; }