Arredondando um double

14 respostas
Paulo_Silveira

Aproveitando o outro topico que esta ai.

Quero algo que possa fazer o seguinte
3.[telefone removido]

me devolva
3.77

e se for

3.[telefone removido]
devolve
3.76

Nao vale multiplicar por 100, dar round e dividir por 100! Quero saber da API mesmo. Tem?

14 Respostas

L

Paulo,

talvez seja pior do que multiplicar por 100, etc. e tal mas é pela API…
dá uma olhada no tempo que leva… :lol:

import java.math.*;

public class TestRound {
	
	public static void main(String []args){
	
		long ti = System.currentTimeMillis();
		TestRound t = new TestRound();
		t.doTest(3.7641231233d);
		ti = System.currentTimeMillis()-ti;
		System.out.println("tempo decorrido (ms): " + ti);
	
	}
	
	public void doTest(double num){
	
		int decimalPlace = 2;
		BigDecimal bd = new BigDecimal(num);
		bd = bd.setScale(decimalPlace,BigDecimal.ROUND_HALF_UP);
		num = bd.doubleValue();
		System.out.println(num);
	}
}

hmm, seria melhor computar somente o tempo da conversão… aí tá contando SOPs tb etc…

[]'s

danieldestro

Math.ceil(double a);

Returns the smallest (closest to negative infinity) double value that is not less than the argument and is equal to a mathematical integer.

Math.floor(double a);

Returns the largest (closest to positive infinity) double value that is not greater than the argument and is equal to a mathematical integer.

** Agora é só fazer vezes 10 e passar como argumento.

Hempx

decimal format tambem resolveria esse problema…

DecimalFormat decimal = new DecimalFormat( "0.00" ); System.out.println( decimal.format( 3.[telefone removido] ) );

louds

Curiosamente o java nao tem um monte de funcoes para fp que existem em muitas outras linguagens, e arredondamento eh mais uma dessas.

Zuando o numero e multiplicando/dividindo, voce pode usar Math.rint().

Paulo_Silveira

poxa pessoal! agradeco muito mesmo!

Lig

Por que a formatação do resultado de System.out.println( decimal.format( 3.[telefone removido] ) ); é 3,77, ou seja, com vírgula e não ponto? (3.77) :oops:

T

Lig, experimente mudar o “regional settings” da sua máquina (presumo que você esteja usando Windows) para English / United States e veja o que acontece. É que esse método “format” obedece ao “Regional Settings”.

renatosilva

Pegando o bonde, como eu arredondo um float para um inteiro???
E 0.5 arredondado vira 0 ou 1??

T
class TestRound {
    public static void main(String[] args) {
        float[] samples = {
            0.5f, 0.7f, 0.8f, 1.0f, 1.5f, -1.5f, 1.3f, -1.3f, 1.51f, -1.51f, 1.6f
        };
        
        int n;
        for (int i = 0; i < samples.length; ++i) {
            n = Math.round (samples[i]);
            System.out.println (samples[i] + "-> " + n);
        }
    }
}

Rode o programa acima, e veja a saída. Dá para entender o que Math.round faz.

C>java -cp . TestRound
0.5-> 1
0.7-> 1
0.8-> 1
1.0-> 1
1.5-> 2
-1.5-> -1
1.3-> 1
-1.3-> -1
1.51-> 2
-1.51-> -2
1.6-> 2
Lig
Valeu Thingol! :thumbup:

Alterei o locale pelo pgm msm:

NumberFormat decimal = DecimalFormat.getInstance(Locale.ENGLISH);

E depois formatei as casas decimais:

decimal.setMinimumFractionDigits(2);

+.
dudaskank

Quando eu quero mudar de float ou double para int e arredondar eu tenho feito assim:

(int)(numero + 0.5)

hehehe :slight_smile:

T

Somar 0.5 e truncar é a definição de Math.round, tal como descrito no javadoc. É isso aí, dudaskank

J

Boa Tarde Galera! Aproveitando o Topico!
Estou com problema para configurar o regional setting no windows 2003 server, que esta em english language. Pois quando seto ele para Portugues(Brasil), nas configurações regional, e salvo as alterações. As configurações não vistas no Tomcat, na parte de Ponto Decimal. :frowning:
Alguém sabe como me ajudar…?

Heartbreaker

Hempx:
decimal format tambem resolveria esse problema…

DecimalFormat decimal = new DecimalFormat( "0.00" ); System.out.println( decimal.format( 3.[telefone removido] ) );

Esse trecho fodeu meu codigo cara :frowning:
kkkkk

Criado 29 de outubro de 2003
Ultima resposta 16 de dez. de 2013
Respostas 14
Participantes 11