Aproveitando o outro topico que esta ai.
Quero algo que possa fazer o seguinte
3.7691231233
me devolva
3.77
e se for
3.7641231233
devolve
3.76
Nao vale multiplicar por 100, dar round e dividir por 100! Quero saber da API mesmo. Tem?
Aproveitando o outro topico que esta ai.
Quero algo que possa fazer o seguinte
3.7691231233
me devolva
3.77
e se for
3.7641231233
devolve
3.76
Nao vale multiplicar por 100, dar round e dividir por 100! Quero saber da API mesmo. Tem?
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
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.
decimal format tambem resolveria esse problema…
DecimalFormat decimal = new DecimalFormat( "0.00" );
System.out.println( decimal.format( 3.7691231233 ) );
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().
poxa pessoal! agradeco muito mesmo!
Por que a formatação do resultado de System.out.println( decimal.format( 3.7691231233 ) ); é 3,77, ou seja, com vírgula e não ponto? (3.77) :oops:
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”.
Pegando o bonde, como eu arredondo um float para um inteiro???
E 0.5 arredondado vira 0 ou 1??
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
Valeu Thingol! :thumbup:
Alterei o locale pelo pgm msm:
NumberFormat decimal = DecimalFormat.getInstance(Locale.ENGLISH);
E depois formatei as casas decimais:
decimal.setMinimumFractionDigits(2);
Té+.
Quando eu quero mudar de float ou double para int e arredondar eu tenho feito assim:
(int)(numero + 0.5)
hehehe
Somar 0.5 e truncar é a definição de Math.round, tal como descrito no javadoc. É isso aí, dudaskank
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.
Alguém sabe como me ajudar…?
[quote=Hempx]decimal format tambem resolveria esse problema…
DecimalFormat decimal = new DecimalFormat( "0.00" );
System.out.println( decimal.format( 3.7691231233 ) );
[/quote]
Esse trecho fodeu meu codigo cara
kkkkk