marceloCR Posted January 25, 2006 Report Share Posted January 25, 2006 Senhores, nao sei se alguem jah passou por isso, mas tenho uma aplicacao onde sao realizadas uma serie de calculos, e algumas vezes, a soma total dos valores apresenta diferença de centavos (axo que arredonda a casa decimal erroneamente) ex.: 12.90 + 12.99 + 12.43 = 38.32 (as vezes da 38.31 ou .33) Alguem sabe como resolver? Marcelo Campos Harbour 43 + xHarbour 0.99.51 + WS Quote Link to comment Share on other sites More sharing options...
marceloCR Posted January 25, 2006 Author Report Share Posted January 25, 2006 Senhores, nao sei se alguem jah passou por isso, mas tenho uma aplicacao onde sao realizadas uma serie de calculos, e algumas vezes, a soma total dos valores apresenta diferença de centavos (axo que arredonda a casa decimal erroneamente) ex.: 12.90 + 12.99 + 12.43 = 38.32 (as vezes da 38.31 ou .33) Alguem sabe como resolver? Marcelo Campos Harbour 43 + xHarbour 0.99.51 + WS Quote Link to comment Share on other sites More sharing options...
marceloCR Posted January 25, 2006 Author Report Share Posted January 25, 2006 Senhores, nao sei se alguem jah passou por isso, mas tenho uma aplicacao onde sao realizadas uma serie de calculos, e algumas vezes, a soma total dos valores apresenta diferença de centavos (axo que arredonda a casa decimal erroneamente) ex.: 12.90 + 12.99 + 12.43 = 38.32 (as vezes da 38.31 ou .33) Alguem sabe como resolver? Marcelo Campos Harbour 43 + xHarbour 0.99.51 + WS Quote Link to comment Share on other sites More sharing options...
neto_23 Posted January 25, 2006 Report Share Posted January 25, 2006 tenta mudar o teu set decimals to 2 para a quantidade necessaria de decimals dentro dessa rotina ok... e volta ao normal depois de encerrar a rotina... exemplo... 81.256 se esse for numero da soma ele vai arrendodar para 81.26 pq vc nao aumento a casa decimal para tres.... fw27-blinker7-clipper53B-cdx-Workshop gabrieis@bol.com.br Quote Link to comment Share on other sites More sharing options...
siscat Posted January 25, 2006 Report Share Posted January 25, 2006 Marcelo, boa tarde.. olha só ... voce tem que verificar se todos os valores da soma estão exatos, ou seja, sem arredondamento... no seu exemplo mesmo: 12.90 + 12.99 + 12.43 = 38.32 (as vezes da 38.31 ou .33) imagine que o valor 12,90 por exemplo, foi o resultado de alguma outra operação que voce fez... e digamos ainda que o resultado exato desta operação foi 12,907 ... se sua picture estiver 'setada' para 99.99 voce vai ver 12,90 ... más na hora de somar o processador vai fazer a operação com o numero real... ou seja... 12.907 + 12.99 + 12.43 = seria 38.327 más com a picture em duas casas mostraria 38.33 faz o seguinte, coloca uns pontos de debug no seu codigo e peça para mostrar os valores... não usa o msginfo() pra mostrar valores numericos.. ele se perde as vezes... usa o WQout ... exemplo.. WQOut( {nvalor1, nvalor2, nvalor3,... nvalorn} ) abraços.. Marllon Figueiredo Analista de Sistemas ERP/CRM Porto Alegre - RS siscatsoftware@hotmail.com FWH for (x)Harbour, xMate, Clipper, MsSQL, Oracle, Postgres, MySQL, TopConnect, ADS Versões: FWH 2.6 e 2.7 - xHarbour 0.99.4 - 0.99.51 Quote Link to comment Share on other sites More sharing options...
eajunior Posted January 26, 2006 Report Share Posted January 26, 2006 Ola, irei postar hoje em dicas a função que utilizo para resolver este problema de arrendondamento. Nome da função ROUNDING() Onde você vê um obstáculo alguém vê o término da viagem e o outro vê uma chance de crescer. Elias Abrão Júnior Fone : (0**11) 5181-6909 São Paulo - SP eajunior.fw@terra.com.br xHarbour 0.99.0 - Fivewin 2.5 e xMate Quote Link to comment Share on other sites More sharing options...
pauloaraujo Posted January 26, 2006 Report Share Posted January 26, 2006 Marcelo, O Marllon está certo. Os valores que você está tratando têm casas decimais acima do que você está mostrando, devido a PICTURE. Imagine: nVr_a:= 1.3351 // resultado de algum cálculo nVr_b:= 1.4652 // idem nVr_c:= nVr_a + nVr_b Com a picture "999,999.99", será mostrado: . nVr_a: 1.34 . nVr_b: 1.47 . nVr_c: 2.80 Embora você mostre com 2 casas decimais, os valores das variáveis continuam os mesmos. Portanto, a soma real está certa, mas o resultado MOSTRADO não. Nesses casos uso a funçãozinha abaixo: nVr_a:= 1.3351 // resultado de algum cálculo nVr_b:= 1.4652 // idem nVr_c:= VR(nVr_a,2) + VR(nVr_b,2) // (1.34 + 1.47 = 2.81) --------------------------------------------------------- FUNC VR(__VALOR,__DEC) __VALOR=STR(__VALOR,16,__DEC) RETU(VAL(__VALOR)) Espero ter ajudado Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.