segunda-feira, 9 de novembro de 2009

Re: [java-br] Somatório de Double

·

 

Pessoal.

Gostaria só de acrescentar algo e corrigr uma afirmação.

A correção.
Não é o Java que tem problema de arredondamento, e sim o padrão de
representação de número em ponto flutuante (float e double em Java). O
padrão utilizado pela maioria (senão todas) das CPU e linguagens é o
padrão IEEE 754 que apresenta problemas na representaçaõ de certos
números reais.

Os detalhes.
O problema existe em Pascal (delphi) com o tipo REAL, em banco de
dados com o tipo REAL, em COBOL mainframe com o tipo COMP, em C e C++
com os tipos float e double, em C# também deve ter o mesmo problema e
assim por diante.

O problema é com o padrão e não com a linguagem.

Para maiores informações.
http://en.wikipedia.org/wiki/IEEE_754-2008

--
José Augusto Martins Nieviadonski
Sun Certified Associate for Java Platform, Standard Edition
Especialista Técnico II - FX and Trade Systems - HSBC Bank Brasil S.A.
Professor - Pós-graduação Java - Faculdades SPEI
jose.augusto.martins@gmail.com
jaugusto@spei.br

Citando Pablo Souza <pvrsouza@gmail.com>:

> É....realmente tem problemas....
> Vou utilizar esta classe mesmo!!
>
> Grande abraço!!
>
>
>
> 2009/11/9 db <dbconrado@gmail.com>
>
>> Cara,
>>
>> o Java tem problemas de arredondamento. Utilize a classe BigDecimal ao
>> invés
>> de double.
>>
>> HTH
>> db
>>
>> 2009/11/8 Pablo Souza <pvrsouza@gmail.com>
>>
>> >
>> >
>> > Srs,
>> >
>> > Está acontende uma coisa estranha em meu código. Estou fazendo um
>> somatório
>> > de dados do tipo double em uma função e quando retorno o valor, este
>> valor
>> > aparece com um decimal que não deveria existir. Por exemplo:
>> >
>> > O NORMAL: 2.0 + 2.0 = 4.0
>> > *O QUE ACONTECE: 2.0 + 2.0 = 4.01*
>> >
>> > Segue meu código:
>> >
>> > *FUNÇÃO:*
>> > public static double[] somaDias(double email[][], int qtdLinhas, int
>> > qtdColunas) {
>> > double somaDias[] = new double[qtdColunas];
>> > for (int y = 0; y < qtdColunas; y++) {
>> > for (int x = 0; x < qtdLinhas; x++) {
>> > somaDias[y] = (email[x][y] + somaDias[y]);
>> > }
>> > }
>> > return somaDias;
>> > }
>> >
>> > RETORNO:
>> > //bloco que exibe os somatórios
>> > somaDias = funcoesMatematicas.somaDias(email,
>> > indice, qtdDias);
>> > for (int y = 0; y < somaDias.length; y++) {
>> > Fjalp.setCursorPosition(linhaFinal + 3,
>> > colunaCadastroValor);
>> > System.out.print((new
>> > DecimalFormat("#,###.0")).format(somaDias[y]));
>> > colunaCadastroValor = colunaCadastroValor + 6;
>> > }
>> >
>> > Agradeço a atenção!
>> >
>> > Abraços!
>> > --
>> > Atenciosamente,
>> >
>> > Pablo Souza
>> > Tel.: (71) 9983-7775
>> >
>> > [As partes desta mensagem que não continham texto foram removidas]
>> >
>> >
>> >
>>
>>
>> [As partes desta mensagem que não continham texto foram removidas]
>>
>>
>>
>> ------------------------------------
>>
>> Para sair da lista, envie email para: java-br-unsubscribe@yahoogroups.com
>> Para upload/download de arquivos:
>> http://www.yahoogroups.com/files/java-brLinks do Yahoo! Grupos
>>
>>
>>
>
>
> --
> Atenciosamente,
>
> Pablo Souza
> Tel.: (71) 9983-7775
>
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>

__._,_.___
Atividade nos últimos dias:
Para sair da lista, envie email para: java-br-unsubscribe@yahoogroups.com
Para upload/download de arquivos: http://www.yahoogroups.com/files/java-br
.

__,_._,___

0 comentários:

Pague com LPs do Mister Colibri

Pague com LPs do Mister Colibri
Quer comprar celular,Tablet,pen drive, GPS e muito outros produtos e ainda podendo pagar tudo em LPs ?Pois saiba que isso é possível,basta você visitar o site downloadstotal.com e realizar a sua compra com toda tranquilidade e segurança!!!

Hora

Online

Arquivo do Blog