как получить числа, чтобы иметь точность 0,05? - PullRequest
3 голосов
/ 29 апреля 2009

Следующее гарантирует, что любые большие числа будут точны только до сотых долей ( относится к этому ответу ):

public function round( sc:Number ):Number
{
    sc = sc * 100;
    sc = Math.floor( sc );
    sc = sc / 100;

    return sc;
}

Каков оптимальный способ округлить мои числа с точностью до .05? Есть ли что-то умное, что нужно сделать с битрейтом, чтобы получить этот результат? Например, я хотел бы:

3,4566 = 3,45

3,04232 = 3,05

3,09 = 3,1

3,32 = 3,3

Ответы [ 2 ]

6 голосов
/ 29 апреля 2009

Вы можете умножить на 20, округлить, а затем разделить на 20.

Edit: вы захотите использовать Math.round () вместо Math.floor (), иначе ваш тестовый пример 3.09 превратится в 3.05.

2 голосов
/ 29 апреля 2009

Вы можете просто изменить * 100 на * 20 и / 100/20. Но зачем останавливаться на достигнутом, когда вы можете естественным образом обобщать?

double floor(double in, double precision) {
    return Math.floor(in/precision)*precision
}
//floor(1.07, 0.05) = 1.05
...