округлить до произвольных делений? - PullRequest
1 голос
/ 14 февраля 2011

Я хочу округлить в соответствии с произвольным делением, например, я получаю число от 0 до 1, и я хочу округлить его в соответствии с делением на 48-е, например, если я получу что-то вроде 5/96, я хочу либо 2/48 или3/48.Какая хорошая формула для этого?

Ответы [ 2 ]

2 голосов
/ 14 февраля 2011

Так же, как с округлением до десятичных знаков.Если у вас есть n «деления» и номер x, сделайте round(x*n)/n.
. В вашем примере это будет round((5/96)*48)/48 = round(2.5)/48 = 2/48

round можно заменить на floorили ceil, в зависимости от желаемого направления.

0 голосов
/ 14 февраля 2011

Предполагает целочисленное деление, поэтому оно будет округляться вниз:

float retVal = scaleRange(in, oldMin, oldMax, newMin, newMax) {
  return (in / ((oldMax - oldMin) / (48 - 0))) + 0;
}
...