Java arredondar qualquer número

146

Não consigo encontrar a resposta que estou procurando em relação a uma pergunta simples: como arredondar qualquer número para o mais próximo int?

Por exemplo, sempre que o número for 0,2, 0,7, 0,22222, 0,4324, 0,99999, eu gostaria que o resultado fosse 1.

Até agora eu tenho

int b = (int) Math.ceil(a / 100);

Parece não estar fazendo o trabalho, no entanto.

Stevanicus
fonte
Por que você está dividindo por 100 no seu código de exemplo?
precisa
14
Aposto que você atem um tipo inteiro.
Nikita Rybak
1
sim, seu direito é um int ... obrigado por apontar isso. 100.0 classificou para mim.
Stevanicus
1
Eu estou supondo que o que ele quer é um / 100 arredondado, mas sim, a pergunta poderia usar algum esclarecimento.
27410 Jay
1
NOTA: Nesta pergunta, são fornecidas melhores respostas.
martijnn2008

Respostas:

289

Math.ceil()é a função correta para chamar. Eu estou supondo que aé um int, o que faria a / 100executar aritmética de número inteiro. Tente em Math.ceil(a / 100.0)vez disso.

int a = 142;
System.out.println(a / 100);
System.out.println(Math.ceil(a / 100));
System.out.println(a / 100.0);
System.out.println(Math.ceil(a / 100.0));
System.out.println((int) Math.ceil(a / 100.0));

Saídas:

1
1.0
1.42
2.0
2

Consulte http://ideone.com/yhT0l

moinudin
fonte
3
isso somente se "a" for duplo
L.Grillo
^^ "a" precisa ser um dobro ou converter um dobro.
Codeversed
1
aé um intneste exemplo e funciona como sugerido. Ao fazer int / floato resultado é a float, como demonstrado na saída. Experimente o link.
dantiston
16

Eu não sei por que você está dividindo por 100, mas aqui minha suposição int a;

int b = (int) Math.ceil( ((double)a) / 100);

ou

int b = (int) Math.ceil( a / 100.0);

fonte
11
int RoundedUp = (int) Math.ceil(RandomReal);

Isso parecia fazer o trabalho perfeito. Trabalhou toda vez.

Liehan Els
fonte
2

10 anos depois, mas esse problema ainda me pegou.

Portanto, esta é a resposta para aqueles que são tarde demais como eu.

Isso não funciona

int b = (int) Math.ceil(a / 100);

Causar o resultado a / 100 acaba sendo um número inteiro e é arredondado para que o Math.ceil não possa fazer nada a respeito.

Você deve evitar a operação arredondada com este

int b = (int) Math.ceil((float) a / 100);

Agora funciona.

Reginaldo Rigo
fonte
0

A maneira mais fácil de fazer isso é: você receberá um float ou o dobro e deseja convertê-lo para a rodada mais próxima, basta fazer System.out.println((int)Math.ceil(yourfloat)); o trabalho perfeitamente

LouieAdauto
fonte
-3

Assumindo a como double e precisamos de um número arredondado sem casa decimal. Use a função Math.round ().
Isso vai como minha solução.

double a = 0.99999;
int rounded_a = (int)Math.round(a);
System.out.println("a:"+rounded_a );

Output : 
a:1
Ankit Chauhan
fonte
1
Esta é uma resposta errada, pois é solicitado aqui para arredondar para cima se a = 0,2, o resultado será 0 #
Mohamed23gharbi #