Formatação Decimal + Insert e Update

(Régis Matos) #1

Estou com um problemática básico…

Se alguém puder dar uma luz, eu agradeço…

Tenho uma variável global, e um campo do tipo decimal.

[tem_var_global] = 222,22;

{valor_total} = 1111,11;

$diferenca = {valor_total} - [tem_var_global];

$diferenca == 888,89

Eu preciso Trocar a ( , ) pelo ( . )

Para usar o Insert ou no Update

(rayfcrols) #2

Utilize as macros de formatação de numeros do SC ou as funções do PHP

(Régis Matos) #3

O Rayfcrols, obrigado pela dia… mais tentei de todo jeito e não consegui…

Mais eu criei uma função que resolveu meu caso aqui…

Obrigado…

/*
função formatar numero para usar no Insert e Update
valor de entrada #####,## - Com Virtula ( , )
valor de saida #####.## - Com Ponto ( . )
*/

function formata_numero($valor) {
$ary = explode(",", $valor);

$temp_var = $ary[0] . '.' . $ary[1];
 
return  $temp_var;

}

$VALOR1 = ‘1111,11’;
$VALOR2 = ‘222,22’;

$VALOR1 = formata_numero($VALOR1);
$VALOR2 = formata_numero($VALOR2);

$RESULTADO = $VALOR1 - $VALOR2;

echo $RESULTADO;

(George Carvalho) #4

Teste

$diferenca=explode(",",$diferenca);
$diferenca=implode(".",$diferenca);

Acho que funciona.

(George Carvalho) #5

Desculpe, postamos quase ao mesmo tempo e não percebi que já tinha sido resolvido.

(Diogo Toscano) #6

So por curiosidade …

[tem_var_global] = 222,22; de onde esta vindo o 222,22? Pois separador de decimal do proprio php é “.” … so pra entender a origem do problema…

Cuidado usando explode, se a string que voce esta usando realmente vier com a string a ser explodida, vira array, se nao continua string …

function formata_numero($valor)
{
$inteiro = $valor;
$decimais = “00”; //forca string, as vezes numero em concatenacao fica vazio
if(strpos($valor, “,”) !== false)
{
list($inteiro, $decimais) = explode(",", $valor);
}

return $inteiro . "." . $decimais;

}

(Régis Matos) #7

a variável [tem_var_global] esta vindo de uma ligação…

assumindo o valor de um campo do SC do formulário anterior…

Só por curiosidade… eu estou tendo um problema danado com as casas decimais… será que é só eu mesmo???

(Diogo Toscano) #8

Rapaz … estranho, mas acho que sim :-p

Espera ver se alguem mais se pronuncia

(Régis Matos) #9

A formatação para usar no insert, ficou bom…

Obrigado… T+

(Régis Matos) #10

Diogo Toscano,

Estou com problema ainda com calculo…

Incrível, eu não sei por que… Já revisei todo o código… e nada…

De repente pode até ser alguma cagada minha…

Ele arredonda o valor… é dureza…

Se eu te mandar a aplicação vc pode dar uma olhada fazendo favor…

Eu não seu mais o que fazer… eu tive um problema parecido… eu tive que refazer a aplicação toda para resolver…

Se vc puder dar uma olhada eu agradeço…

Eu até acredito que é algum Bug…

(Diogo Toscano) #11

Seguinte … talvez voce esteja usando de forma equivocada …

Quando voce manda salvar a variavel direto no campo, desde a versão 4, ele guarda o campo com a formatação da interface.

O que voce pode fazer pra funcionar sem problema, é tirar para o campo não levantar a variavel global … e na ligação onde voce usa, voce passar o campo para a variavel global, ou jogar no onvalidatesucess para criar a variavel global.

Mas me mostra em que parte ele arredonda, mostra o valor antes dele arredondar, mostra o comando sql(ou php) quando arredonda e mostra um var_dump apos arredondado.
separador decimal de banco e php é “.”. Se em alguma parte continuar com “,” eh bem provavel que o php ou o banco trunque na hora da operação.

Ta ligado … mas pode mandar sim q eu dou olhada se precisar.

(Régis Matos) #12

Mandei no seu e-mail…

Observa o valor total do produto… depois fecha tudo e abre novamente o pedido…

(Régis Matos) #13

Realmente eu estava usando de forma equivocada…

o problema estava na formatação do campo…

mais mesmo assim obrigado…

agora ficou tudo ok aqui…

Deu tudo certo…

(Diogo Toscano) #14

Massa, então ta filet :slight_smile:

(Régis Matos) #15

Incrível, essas coisas só acontece comigo…

Estou achando que vou me benzer kkkk

Apesar de não acreditar nisso… pelo-menos é uma opção kkkkkk

Pessoal, por favor alguém pode fazer um teste…

Fazendo favor…

Ao fazer um Cadastro em um campo VALOR. FLOAT

coloca o valor = 11223344,77

Após clicar em inserir, observa no banco de dados… se as casas decimais foi os 77…

Eu agradeço…

(Diogo Toscano) #16

coloca em modo debug pra gente ver o comando que foi pro banco e qual o separador decimal que esta na conexao e qual separador decimal foi na instalacao do mysql? so por curiosidade …

112233,77 é na interface, quando for pra codigo (submetido) o valor provavelmente vai virar 112233.77 que eh o separador decimal padrao do banco.

Qual valor ficou ai?

(Régis Matos) #17

11223344,77

faltou o 44

(Régis Matos) #18

Será que é o tipo de dado Float?

PQ no banco, ficou = 1.12233e+07

??

para numero com casas decimais eu estou usando o Float.

(Régis Matos) #19

De cara, já percebi que vou ter que mudar de tipo de dado…

float, para double ou real

Tipo de Campo Tamanho de Armazenamento
TINYINT 1 byte
SMALLINT 2 bytes
MEDIUMINT 3 bytes
INT 4 bytes
INTEGER 4 bytes
BIGINT 8 bytes
FLOAT(X) 4 ou 8 bytes
FLOAT 4 bytes
DOUBLE 8 bytes
REAL 8 bytes

(Diogo Toscano) #20

valores a gente usa decimal.

faz 1 teste … mysql?