2014-09-22 3 views
4

У меня есть следующий сценарий, предположим, что 125 250 500 являются параметрами округления, на основе которых мы должны делать округление.Округление UP двойных значений в java на основе параметров

  1. когда параметр округления 125, то мне нужно округлить до 1/8 доллара, т.е. значение = 10,01, то он должен вернуть 10.125 значение = 110,2, то он должен вернуть 110,250

  2. когда округление параметр 250, то мне нужно округлить до четверти доллара, то есть, значение = 10,01, то он должен вернуть 10.250 значение = 110,3, то он должен вернуть 110.500

  3. когда округление параметр 500 п мне нужно округлить до половины доллара, то есть, значение = 10,01, то он должен вернуть 10500 значение = 110,6, то он должен вернуть 111

Я написал код, используя Math.round (8f * значение/8й), которая округляет до ближайшего из 1/8 доллара, но округление должно быть UP всегда, но в моем случае 10,01 округляет до 10

ответ

1

Я написал код, используя Math.round (ое * значение/8й) которые округляются до ближайшего 1/8-го доллара

Нет, нет. Он округляется до ближайшего целого числа.

Try, например Math.round(((8f+1/8f) * value))/8f.

1

разбить его на управляемые шаги, никакого значения не пытается сделать это в одной строке. Итак:

Сколько стоит 1/8 долларов США?

float dollar8ths = value * 8f; 

Круглый, что до:

int dollar8thsRoundedUp = (int) Math.ceil(dollar8ths); 

Наконец, положить обратно в доллары:

float dollars = dollar8thsRoundedUp/8f; 
3

Во-первых, вы не округлять, вы делаете потолок.

Этот код делает то, что вы хотите:

Math.ceil(n * 1000/factor) * factor/1000; 

Вот код в комплекте в качестве способа:

public static double ceil(double n, int factor) { 
    return Math.ceil(n * 1000/factor) * factor/1000; 
} 

Обратите внимание, что не требуется отливка, потому что в Java arithemtic, если один из операндов double, остальные автоматически (и безопасно) расширены до double.

1

Это должно делать то, что вы хотите:

double myRound(double val, int param) 
{ 
    val = 1000 * val/param; 
    val = Math.ceil(val); 
    return val * param/1000; 
} 

например:

System.out.println(myRound(10.01, 125)); 

дает

10.125 
Смежные вопросы