FS
Erro na soma ao formatar valores.
Fechado
Boa noite,
Estou utilizando uma função para somar vários valores (R$) e através do método setExitAction popular outro campo. O problema é que a soma funciona corretamente com valores até R$ 999,99. Como não tenho muita experiência ainda, não estou conseguindo encontrar onde estou errando. Eu sei que é algo na formatação do valor, mas já tentei alguns exemplos e não dá certo. Por exemplo, insiro 3 valores, 200,00, 1.000,00 e 200,00, só que ao invés de retornar R$ 1.400,00, está retornando 401,00 . Segue abaixo a função e também como estou formatando os valores. Desde já agradeço.
Estou utilizando uma função para somar vários valores (R$) e através do método setExitAction popular outro campo. O problema é que a soma funciona corretamente com valores até R$ 999,99. Como não tenho muita experiência ainda, não estou conseguindo encontrar onde estou errando. Eu sei que é algo na formatação do valor, mas já tentei alguns exemplos e não dá certo. Por exemplo, insiro 3 valores, 200,00, 1.000,00 e 200,00, só que ao invés de retornar R$ 1.400,00, está retornando 401,00 . Segue abaixo a função e também como estou formatando os valores. Desde já agradeço.
- <?php
- //Formatação dos campos
- $valoconsum->setNumericMask(2,',', '.');
- $deprec->setNumericMask(2,',', '.');
- $valorenergia->setNumericMask(2,',', '.');
- $salariofunc->setNumericMask(2,'.', '.');
- //Minha função pra atualizar o campo custohora
- public static function onUpdateCustoh($param)
- {
- $valorenergia = (double) str_replace(',', '', $param['valorenergia']);
- $valoconsum = (double) str_replace(',', '', $param['valoconsum']);
- $deprec = (double) str_replace(',', '', $param['deprec']);
- $salariofunc = (double) str_replace(',', '', $param['salariofunc']);
- $horastrab = $param['horastrab'];
- $obj = new StdClass;
- $obj->custohora = number_format(($valorenergia + $valoconsum + $deprec + $salariofunc), 2, ',', '');
- TForm::sendData('form_Custo', $obj);
- }
- ?>
A questão é que as operações matemáticas são realizadas com números no padrão inglês.
Então você deve:
1- formatar os números do padrão Brasil para o Inglês;
2- efetuar as operações matemáticas;
3- formata o resultado para o padrão de Inglês para Brasileiro, para exibir na tela.
Assim, eu criei uma classe (Uteis.class.php) com vários métodos que facilitam o dia-a-dia, esta classe fica salva na pasta: app/lib/util
Nela eu utilizo os seguintes métodos:
Uteis::numeroIngles($num); //para formatar no padrão Inglês
Uteis::numeroBrasil($num); //para formatar no padrão Brasil
Segue a classe Uteis:
Olá Ricardo Câmara.
Muito interessante essa sua classe! Vc poderia explicar a forma correta de se trabalhar com essa sua classe? Tipo: Os métodos dela devem ser chamados da classe controller ou do model? Pode dar um exemplo de como chamar esses métodos?
Também fiquei na dúvida quanto aos métodos utilizados para tratar dados da TDatagrid... Tem algum exemplo de uma TDatagrid utilizando algum desses métodos?
Muito obrigado Ricardo, irei testar aqui.
Para ajudar,
Aqui tem um exemplo com cálculo na saída do campo:
www.adianti.com.br/framework_files/tutor/index.php?class=POSFormView
Busque pelo método onExitProduct().
Att,
A classe Uteis tem todos os métodos tipo STATIC, pra que sejam utilizados sem instanciar a classe, você pode usar assim:
Os métodos das TDataGrids você usar isto após ter declarado as colunas da TDataGrid:
Eu Fiz um Recibo de Salário cheio de cálculos, veja ai como eu fiz:
=============================================================