Jump to content


Photo

Formatar Valores De Dinheiro


  • Faça o login para participar
9 replies to this topic

#1 GreyWolf

GreyWolf

    Mestre

  • Usuários
  • 674 posts
  • Sexo:Não informado

Posted 28/09/2006, 16:04

Boa tarde raça.

Estou passando pela seguinte dificuldade:

Tenho um site onde o cliente cadastra valores de pacotes, esses valores podem variar desde 10 reais até mais de 100 mil reais. Detalhe que as moedas são reais, euros e dolares.

Estou usando campo float no SQL e queria saber o melhor jeito de inserir e retornar esses dados.

No input atualmente eu coloquei para ele por somente numeros. ex: 12000
Pra retornar usei: number_format($content->getVSolteiro(), 2, ',', '.');

Assim já está certo ou tem outro jeito melhor?

Obrigado

#2 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 28/09/2006, 16:28

Opa... ;)

No campo de texto tu pode usar um JavaScript para formatar os números (casas decimais e separadores de milhares), para uma melhor visualização. Ao usuário postar, tu pega só os números do valor por expressão regular, e o divide por 100 (por causa dos decimais). Feito isso, cadastra no BD. Na exibição, tu pode usar a função number_format() mesmo, embora que a money_format() seria a melhor opção para este caso, pois se trata de mais de uma moeda.

É isso. ;)

[]’s :DAté mais

#3 GreyWolf

GreyWolf

    Mestre

  • Usuários
  • 674 posts
  • Sexo:Não informado

Posted 28/09/2006, 16:46

Dividir por 100? Essa eu não entendi o.O

Entra no msn entra xD~

#4 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 28/09/2006, 16:50

Dividir por 100? Essa eu não entendi o.O

Lembra da formatação JavaScript? Vai incluir as casas decimais... Quanto tu pegar só os números, tu vai ter que dividir por 100 para obter o número certo, pois não terá nada separando. :D

Entra no msn entra xD~

Num posso. :huh:

Daqui 10 minutos tenho que sair e ainda tenho que fazer uma aplicação XUL rodar aqui à qualquer custo. :P :(

[]’s :DAté mais

#5 GreyWolf

GreyWolf

    Mestre

  • Usuários
  • 674 posts
  • Sexo:Não informado

Posted 28/09/2006, 16:52

Ixi heahe, entra amanhã então xP~

Mas se eu fizer sem o JS ai não preciso dividir por 100 certo?

#6 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 28/09/2006, 17:08

Ixi heahe, entra amanhã então xP~

Mas se eu fizer sem o JS ai não preciso dividir por 100 certo?

Bem... só se tu usar o ponto para separar os decimais. :P

[]’s :DAté mais

#7 GreyWolf

GreyWolf

    Mestre

  • Usuários
  • 674 posts
  • Sexo:Não informado

Posted 28/09/2006, 17:13

É corrido, só aparece ponto na hora que retorna os dados hehe

#8 carneiro

carneiro

    programador web

  • Usuários
  • 155 posts
  • Sexo:Não informado
  • Localidade:cascavel - pr
  • Interesses:programação e design para web

Posted 30/10/2006, 17:28

Ai vai um exemplo, espero que ajude:


Função JavaScript para mascara de valores
Ex: 100000 => 1.000,00
<script>
function FormataValor(id,tammax,teclapres) {
	
		if(window.event) { // Internet Explorer
		 var tecla = teclapres.keyCode; }
		else if(teclapres.which) { // Nestcape / firefox
		 var tecla = teclapres.which;
		}
	

vr = document.getElementById(id).value;
vr = vr.toString().replace( "/", "" );
vr = vr.toString().replace( "/", "" );
vr = vr.toString().replace( ",", "" );
vr = vr.toString().replace( ".", "" );
vr = vr.toString().replace( ".", "" );
vr = vr.toString().replace( ".", "" );
vr = vr.toString().replace( ".", "" );
tam = vr.length;

if (tam < tammax && tecla != 8){ tam = vr.length + 1; }

if (tecla == 8 ){ tam = tam - 1; }

if ( tecla == 8 || tecla >= 48 && tecla <= 57 || tecla >= 96 && tecla <= 105 ){
if ( tam <= 2 ){
document.getElementById(id).value = vr; }
if ( (tam > 2) && (tam <= 5) ){
document.getElementById(id).value = vr.substr( 0, tam - 2 ) + ',' + vr.substr( tam - 2, tam ); }
if ( (tam >= 6) && (tam <= 8) ){
document.getElementById(id).value = vr.substr( 0, tam - 5 ) + '.' + vr.substr( tam - 5, 3 ) + ',' + vr.substr( tam - 2, tam ); }
if ( (tam >= 9) && (tam <= 11) ){
document.getElementById(id).value = vr.substr( 0, tam - 8 ) + '.' + vr.substr( tam - 8, 3 ) + '.' + vr.substr( tam - 5, 3 ) + ',' + vr.substr( tam - 2, tam ); }
if ( (tam >= 12) && (tam <= 14) ){
document.getElementById(id).value = vr.substr( 0, tam - 11 ) + '.' + vr.substr( tam - 11, 3 ) + '.' + vr.substr( tam - 8, 3 ) + '.' + vr.substr( tam - 5, 3 ) + ',' + vr.substr( tam - 2, tam ); }
if ( (tam >= 15) && (tam <= 17) ){
document.getElementById(id).value = vr.substr( 0, tam - 14 ) + '.' + vr.substr( tam - 14, 3 ) + '.' + vr.substr( tam - 11, 3 ) + '.' + vr.substr( tam - 8, 3 ) + '.' + vr.substr( tam - 5, 3 ) + ',' + vr.substr( tam - 2, tam );}
}
}
</scirpt>

No campo Input
<input name="valor" type="text" id="valor" onKeyPress="FormataValor(this.id, 10, event)" 	size="10" maxlength="10"  />

Para gravar no banco vc ira usar a funcao php str_replace
str_replace(",",".",str_replace(".","",$valor))

- O primeiro str_replace [ que contem o $valor nao formatado ]
ira retirar os "." pontos
- o segundo str_replace ira trocar a "," por "."

Na hora de receber do banco de dados utilizara o number_format
number_format($campo['table_valor'], 2, ',','.')

Qualquer duvida...
posta ai =)
Descrição
Alexandre Magno Semmer
www.alexandresemmer.com
Programador Web

Programação
ASP, PHP, JavaScript, CSS, SQL, JAVA, C, Paschal, Ajax, XML
Usuário
Posted Image
Links
Ajax Online - FireBug (Firefox) - Documentação PHP - Documentação Prototype - Documentação jQuery - Script.Aculo.Us

#9 GreyWolf

GreyWolf

    Mestre

  • Usuários
  • 674 posts
  • Sexo:Não informado

Posted 31/10/2006, 11:57

Nossa, vou dar uma olhada melhor nisso xD~

Valeu ae cara ;]

#10 hostdesigner

hostdesigner

    Super Veterano

  • Usuários
  • 2910 posts
  • Sexo:Masculino
  • Localidade:Quirinópolis-GO
  • Interesses:Programação, Mulheres, Diversão, Mulheres, Música, Mulheres, Meu Carro, Mais mulheres, Internet, Outras Mulheres, Quase por último PAZ e por ultimo Outras Váááárias Mulheres...

Posted 31/10/2006, 18:03

<script>
function FormataValor(id,tammax,teclapres) {

if(window.event) { // Internet Explorer
var tecla = teclapres.keyCode; }
else if(teclapres.which) { // Nestcape / firefox
var tecla = teclapres.which;
}


vr = document.getElementById(id).value;
vr = vr.toString().replace( "/", "" );
vr = vr.toString().replace( "/", "" );
vr = vr.toString().replace( ",", "" );
vr = vr.toString().replace( ".", "" );
vr = vr.toString().replace( ".", "" );
vr = vr.toString().replace( ".", "" );
vr = vr.toString().replace( ".", "" );
tam = vr.length;

if (tam < tammax && tecla != 8){ tam = vr.length + 1; }

if (tecla == 8 ){ tam = tam - 1; }

if ( tecla == 8 || tecla >= 48 && tecla <= 57 || tecla >= 96 && tecla <= 105 ){
if ( tam <= 2 ){
document.getElementById(id).value = vr; }
if ( (tam > 2) && (tam <= 5) ){
document.getElementById(id).value = vr.substr( 0, tam - 2 ) + ',' + vr.substr( tam - 2, tam ); }
if ( (tam >= 6) && (tam <= 8) ){
document.getElementById(id).value = vr.substr( 0, tam - 5 ) + '.' + vr.substr( tam - 5, 3 ) + ',' + vr.substr( tam - 2, tam ); }
if ( (tam >= 9) && (tam <= 11) ){
document.getElementById(id).value = vr.substr( 0, tam - 8 ) + '.' + vr.substr( tam - 8, 3 ) + '.' + vr.substr( tam - 5, 3 ) + ',' + vr.substr( tam - 2, tam ); }
if ( (tam >= 12) && (tam <= 14) ){
document.getElementById(id).value = vr.substr( 0, tam - 11 ) + '.' + vr.substr( tam - 11, 3 ) + '.' + vr.substr( tam - 8, 3 ) + '.' + vr.substr( tam - 5, 3 ) + ',' + vr.substr( tam - 2, tam ); }
if ( (tam >= 15) && (tam <= 17) ){
document.getElementById(id).value = vr.substr( 0, tam - 14 ) + '.' + vr.substr( tam - 14, 3 ) + '.' + vr.substr( tam - 11, 3 ) + '.' + vr.substr( tam - 8, 3 ) + '.' + vr.substr( tam - 5, 3 ) + ',' + vr.substr( tam - 2, tam );}
}
}
</script>

:P

Falopa!




0 user(s) are reading this topic

0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq