Na calculadora, o resultado deste cálculo é “0,1”, mas aqui no java o resultado é “0.0”.
Já tentei mudar a variável para double, mas também não deu certo.
quando vc escreve contantes numéricas, se elas não tem ponto decimal, são consideradas inteiras, e a divisão de numeros inteira é truncada.
vc pode fazer 2 coisas: colocar os pontos decimais
a = ((1.0*10.0) / 100.0);
ou colocar cast para float
a = ((float) (1.0*10.0) / 100.0); //deve bastar
T
thingol
((1*10) / 100)
é igual a
10 / 100
que é igual a
0
(quando há 2 números inteiros para fazer a divisão, é feita a divisão inteira, diferentemente do Delphi e do VB).
Para isso funcionar corretamente, use:
((1*10.0) / 100.0)
mrbox
Valeu pessoal,
Estava quebrando a cabeça!
Realmente em Delphi é diferente.
Muito obrigado.
T
thingol
Você que conhece Delphi sabe que “/” faz a divisão e converte para um Real, e “div” faz a divisão inteira igual ao Java.
Se você conhece VB (quem não conhece?) sabe que “/” faz a divisão e converte para um Float ou Double, e “” faz a divisão inteira igual ao Java.
T
thingol
mrbox:
Bom dia,
Estou fazendo alguns cálculos de moeda e preciso que o sistema não faça arredondamento.
Para trabalhar com moedas, evite ao máximo usar “float”; use “double” ou (se quiser ter um pouco de trabalho) “java.math.BigDecimal”.
É que “float” não tem precisão suficiente para fazer cálculos com moeda (salvo para calcular seu salário ) Mas para uma aplicação comercial tradicional, que lida com centenas de milhares de reais, float “abre o bico” e dá erros muito grandes.
peczenyj
Thingol, trabalhar com centavos (ou decimo de centavos, como no caso de preço de gasoluna) ao inves de doubles ou floats não é mais pratico?
Eu trocaria um ponto flutuante por um inteiro, com a ressalva de dividir por 100 na hora de imprimir para o usuario.
marcioa1
O indicado é mesmo o BigDecimal. É um dos tópicos do livro Effective Java. Vale a pena sua leitura
Márcio
T
thingol
peczenyj:
Thingol, trabalhar com centavos (ou décimos de centavos, como no caso de preço de gasolina) ao invés de doubles ou floats não é mais prético?
Eu trocaria um ponto flutuante por um inteiro, com a ressalva de dividir por 100 na hora de imprimir para o usuário.
Pode ser feito assim também, com a ressalva que você tem de deixar tudo muito bem documentado para possibilitar a manutenção. Não é todo mundo que entende essa história de centavos, e de qualquer maneira aritmética de ponto flutuante só é muito mais lenta que a inteira em JavaME (onde normalmente é feita por software) e em máquinas muito antigas, que não têm suporte de hardware. (Hoje em dia podemos dizer que a parte mais lenta da aritmética de ponto flutuante é a conversão )
orlandocn
O indicado é mesmo o BigDecimal. É um dos tópicos do livro Effective Java. Vale a pena sua leitura
Márcio
vale lembrar que BigDecimal eh em media 4000 vezes mais lento que double!
T
thingol
Sem contar que BigDecimal é muito chato de usar (se não souber usar, você pode ter erros maiores que usando um mero double).
Eu prefiro usar “double” a menos que o problema peça valores monetários com mais de 15 casas, e que não envolva coisas mais complexas que uma simples adição ou subtração. Nesse caso é melhor usar BigDecimal.
Ironlynx
Eu sempre recomendei usar BigDecimal para qualquer aplicação "decente" que tratasse com operações aritméticas e tal, até que caí num caso real, de vários cálculos "on-the-fly"(multiplicar e dividir), com precisão apenas de 4 casas(1000,1001 por exemplo).Quando se tem um formulário swing graande(cerca de 90 campos), máquinas antigas como hospedeiras(a maior com 256MB de RAM), o processo Formatação de Entrada->BigDecimal->Formatação de Saída vira um "pain-in-the-ass", principalmente por ter outras coisas como controle de foco,teclado…
Tô até pensando em fazer um componente para o BrazilUtils pensando nisso, algo como JMetricField, com uma opção científica(usando o BD), e outra corrente(com double).