ScornInPC 1 Denunciar post Postado Março 9, 2009 Pessoal, olha que loucura. Tenho uma tabela com um campo float. Se eu uso o SUM para ver o valor total, sai 2535,58. Porem se eu discrimino item à item, a soma da 2535,59. Isso causa um erro no SAP e não deixa lançar o que eu preciso lançar. Alguma sugestão quanto à isso? Valeu Compartilhar este post Link para o post Compartilhar em outros sites
giesta 29 Denunciar post Postado Março 10, 2009 Quem tah somando errado eh o SAP ou o MySQL? Compartilhar este post Link para o post Compartilhar em outros sites
ScornInPC 1 Denunciar post Postado Março 10, 2009 O MySQL mesmo. O problema é alguma coisa de truncar, pois segue as duas queries usadas: SELECT SUM(valor_total) FROM reembolsos WHERE id_reembolso = 21 SELECT FORMAT(valor_total, 2) FROM reembolsos WHERE id_reembolso = 21 OU AINDA SELECT SUM(FORMAT(valor_total, 2)) FROM reembolsos WHERE id_reembolso = 21 Se somo a segunda ou utilizo a 3°, da 1 centavo de diferença. Citei o SAP B1, para deixar claro que essa diferença de 1 centavo é que está dando problemas. Compartilhar este post Link para o post Compartilhar em outros sites
giesta 29 Denunciar post Postado Março 11, 2009 com format existe arredondamento. Compartilhar este post Link para o post Compartilhar em outros sites
ScornInPC 1 Denunciar post Postado Março 11, 2009 Das duas maneiras existem arredondamentos, porem, ele não poderia gravar 19.398273, se eu digitei 19.40, entendeu +/- o problema, acho que isso ocorre na origem, e não na soma, talvez não tenha dito isso pra deixar claro o que eu acho. Compartilhar este post Link para o post Compartilhar em outros sites
giesta 29 Denunciar post Postado Março 11, 2009 o sum() puro da diferença no SAP? Compartilhar este post Link para o post Compartilhar em outros sites
ScornInPC 1 Denunciar post Postado Março 11, 2009 O problema não é no SAP, é no arredondamento mesmo. por exemplo: 0.4446 345.122 2.28046 10.3659 582.326 582.326 10.3659 10.8153 50.3872 50.3666 50.3872 11.0431 43.3327 50.3872 50.3872 0.44408 327.748 327.748 2.25498 0.44408 26.607 Somem isso usando o SUM = 2535.5834556818, que vira 2535.58 Porem o valor deveria ser 2535.59 Compartilhar este post Link para o post Compartilhar em outros sites
giesta 29 Denunciar post Postado Março 11, 2009 usando o SUM = 2535.5834556818, que vira 2535.58 Porem o valor deveria ser 2535.59 deveria pq? Compartilhar este post Link para o post Compartilhar em outros sites
ScornInPC 1 Denunciar post Postado Março 11, 2009 CONTA/PN DEBITO CREDITO VENCIMENTO PROJETO DIRETORIA FILIAL GERENCIA/NATUREZA ATIVIDADE/SETOR 5.1.06.01.003 1296,43 0 11/03/09 80002 1 F1 N13 A02 5.1.06.01.003 582,33 0 11/03/09 80001 1 F1 N13 A02 4.1.11.01.008 328,64 0 11/03/09 80002 1 F1 N13 A02 4.1.11.01.008 328,19 0 11/03/09 80001 1 F1 N13 A02 F00001 0 2185,58 11/03/09 1.1.05.01.004 0 350 11/03/09 2535,59 2535,58 (esta linha foi feito calculo feito na calculadora) Bem, com aqueles dados que enviei anteriormente, eu uso alguns groups, dai saem esses valores, e a soma dos 2 dão direfença desse 1 centavo. Compartilhar este post Link para o post Compartilhar em outros sites
Mário Monteiro 179 Denunciar post Postado Março 12, 2009 nao quais sao os valores no db mas os que passou fiz na calculadora e o resultado foi 2535.5835, exatamente isso Compartilhar este post Link para o post Compartilhar em outros sites
ScornInPC 1 Denunciar post Postado Março 12, 2009 Pois é mario, é o que deveria sair, mas esta saindo 2535,59 Segue minha query, é só um group e um sum SELECT d.AcctCode, p.id_sap, SUM(ad.valor_total) As 'valor_total', p.id_projeto, a.id_colaborador, a.id_tipo_atividade, d.unidade FROM atividades_despesas ad, despesas d, atividades a, fases_projetos fp, projetos p WHERE ad.id_reembolso In (21) And d.id_despesa = ad.id_despesa And a.id_atividade = ad.id_atividade And fp.id_fase_projeto = a.id_fase_projeto And p.id_projeto = fp.id_projeto GROUP BY ad.id_despesa, p.id_projeto Mas bem, acho que isso não é uma coisa normal, então vou ter que procurar outros métodos, sei la, agradeço a todos, valeu Compartilhar este post Link para o post Compartilhar em outros sites
giesta 29 Denunciar post Postado Março 12, 2009 o banco tah fazendo a conta certo, você q quer botar mais 1 centavo ai Compartilhar este post Link para o post Compartilhar em outros sites
ScornInPC 1 Denunciar post Postado Março 12, 2009 usando o SUM = 2535.5834556818, que vira 2535.58 Porem o valor deveria ser 2535.59 deveria pq? Pois se voce mesmo disse que a soma da 2535.58, mas no meu script ta saindo 2535.59, eu é quem coloquei 1 centavo ali a mais? o banco tah fazendo a conta certo, você q quer botar mais 1 centavo aiSe fosse pra ler isso não deveria nem ter postado meu problema neh. E só pra matar o assunto, me Esqueci de ter mostrado a parte que eu somo o um centavo pra causar problemas no forum SELECT d.AcctCode, p.id_sap, SUM(ad.valor_total) + 0.01 As 'valor_total', p.id_projeto, a.id_colaborador, a.id_tipo_atividade, d.unidade FROM atividades_despesas ad, despesas d, atividades a, fases_projetos fp, projetos p WHERE ad.id_reembolso In (21) And d.id_despesa = ad.id_despesa And a.id_atividade = ad.id_atividade And fp.id_fase_projeto = a.id_fase_projeto And p.id_projeto = fp.id_projeto GROUP BY ad.id_despesa, p.id_projeto Compartilhar este post Link para o post Compartilhar em outros sites
Mário Monteiro 179 Denunciar post Postado Março 12, 2009 mas porque quer somar o centavo? resolveu o problema com isso? Compartilhar este post Link para o post Compartilhar em outros sites
ScornInPC 1 Denunciar post Postado Março 12, 2009 Não Mario, só fiz esse query para resolver de modo simples e que eu ja sabia, para nõa prolongar mais o assunto. E é claro que não vou usar essa solução, pois 200 notas por dia, vão dar 2 reais por dia, o que vai dar 60 reias por mes. Claro que não posso fazer isso. Mas fica tranquilo, assim que descobrir o problema disso, eu posto o resultado. Desconfio que seja o campo, descobri que posso criar o campo float e setar o tamanho dos decimais float(2), vou testar isso e ver se isso para de criar dizimas ao gravar, talvez resolva. Compartilhar este post Link para o post Compartilhar em outros sites
Wagner Bianchi 0 Denunciar post Postado Março 12, 2009 Pessoal, No próprio manual do MySQL existe uma advertência em se utilizar os tipos de ponto flutuante Double e Float para valores monetários, estes podem apresentar erros de arredondamento, como este do nosso amigo. Ao invés de utilizar os tipos de ponto flutuante, utilize o tipo de ponto fixo DECIMAL ou o seu alias NUMERIC. Exemplo: DECIMAL(10,2) Para alterar o tipode dado de sua tabela, utilize o comando ALTER TABLE. Happy MySQL'ing http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
ScornInPC 1 Denunciar post Postado Março 12, 2009 Wagner, enfim uma resposta e não uma critica uhaeuhaeu E sua resposta foi a resposta. As notas que ja existem, vou ter que ajustar na mão, pois ao mudar o tipo, ele arredondou e deu o mesmo problema, mas os novos ja viram com 2 casas decimais e não acontecerá o erro novamente. DECIMAL(10, 2) foi a resposta dos problemas, não conhecia. Muito obrigado a todos pela atenção e solução xD Compartilhar este post Link para o post Compartilhar em outros sites
Wagner Bianchi 0 Denunciar post Postado Março 12, 2009 Happy MySQL'ing camarada!! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites