Ir para o conteúdo

Publicidade

 Estatísticas do Fórum

  • 0 Usuários ativos

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

Cursos Online iMasters
Foto:

Formatar valor monetário com 2 casas decimais

  • Por favor, faça o login para responder
7 respostas neste tópico

#1 jrjoliv2003

jrjoliv2003
  • Membros
  • 286 posts

Postado 09 abril 2007 - 17:15

Galera encontrei esse código que formata o valor digitado pelo usuário. Só que está com três casas decimais. Não encontrei no código a opção para mudar para 2 casas decimais.


Quem puder ajudar:

<script language="JavaScript">
function currencyFormat(fld, milSep, decSep, e) {

var sep = 0;
var key = '';
var i = j = 0;
var len = len2 = 0;
var strCheck = '0123456789';
var aux = aux2 = '';
var whichCode = (window.Event) ? e.which : e.keyCode;
if (whichCode == 13)
return true;
key = String.fromCharCode(whichCode);
if (strCheck.indexOf(key) == -1) return false;
len = fld.value.length;
for(i = 0; i < len; i++)
if ((fld.value.charAt(i) != '0') && (fld.value.charAt(i) != decSep)) break;
aux = '';
for(; i < len; i++)
if (strCheck.indexOf(fld.value.charAt(i))!= -1) aux += fld.value.charAt(i);
aux += key;
len = aux.length;
if (len == 0) fld.value = '';
if (len == 1) fld.value = '0' + decSep + '0' + '0' + aux;
if (len == 2) fld.value = '0' + decSep + '0' + aux;
if (len == 3) fld.value = '0' + decSep + aux + aux2;
if (len > 3) {
aux2 = '';

for (j = 3, i = len - 4; i >= 0; i--) {
if (j == 3) {
aux2 += milSep;
j = 0;
}
aux2 += aux.charAt(i);
j++;
}
fld.value = '';
len2 = aux2.length;

for (i = len2 -1; i > 0; i--) // Alterei de i >= 0 para i > 0
fld.value += aux2.charAt(i);
fld.value += decSep + aux.substr(len - 3, len); // Número de casas após a vírgula
}
return false;

}
</script>


Valeu a força!!!

JR.
  • 0

#2 Fabyo

Fabyo

    PHP

  • Masters
  • 5.902 posts

Postado 10 abril 2007 - 07:40

http://forum.imaster...howtopic=144107
  • 0

#3 jrjoliv2003

jrjoliv2003
  • Membros
  • 286 posts

Postado 10 abril 2007 - 10:05

Fabyo, obrigado por ter respondido mas não entendi muito bem o código que você me indicou.

O código que eu postei vai encaixando os números em uma máscara que contém milhar(.) e casas decimais (,). Só que podemos preencher com até 3 casas decimais. Gostaria que limitasse com 2. u não encontrei a opção que reduz isso.


Valeu a força!!!


JR.
  • 0

#4 Fabyo

Fabyo

    PHP

  • Masters
  • 5.902 posts

Postado 10 abril 2007 - 10:27

entao o exemplo que eu mostrei do Illidan tem 2 funções la a 2º é sobre formatar numeros só ver o exemplo que ele mostrou que você ve como deixar 2 casas decimais
  • 0

#5 jrjoliv2003

jrjoliv2003
  • Membros
  • 286 posts

Postado 10 abril 2007 - 10:56

Achei no código que você me indicou numero.format(2, ",", ".") mas não funcionou.

No código que postei encontrei uma das últimas linhas fld.value += decSep + aux.substr(len - 3, len);

ela altera o valor das casas decimais. Se de 3 mudo para 4, beleza, as casas decimais alteram para 4. Mas se mudo para 2 não funciona.


Valeu a força!!

JR.
  • 0

#6 jrjoliv2003

jrjoliv2003
  • Membros
  • 286 posts

Postado 11 abril 2007 - 10:05

Este código aumaticamente vai preenchendo os espaços com os números digitados pelo usuário para um valor em R$. Só que está com três casas decimais. Analisando o código só encontrei esta linha que altera em alguma coisa.

fld.value += decSep + aux.substr(len - 3, len); // Número de casas após a vírgula

Se mudo o numero 3 para 4, o número de casas decimais tb altera. Mas se mudo para 2 fica errado. Preciso que fique com 2 casas decimais.

Quem puder ajudar:

<script language="JavaScript">
function currencyFormat(fld, milSep, decSep, e) {

var sep = 0;
var key = '';
var i = j = 0;
var len = len2 = 0;
var strCheck = '0123456789';
var aux = aux2 = '';
var whichCode = (window.Event) ? e.which : e.keyCode;
if (whichCode == 13)
return true;
key = String.fromCharCode(whichCode);
if (strCheck.indexOf(key) == -1) return false;
len = fld.value.length;
for(i = 0; i < len; i++)
if ((fld.value.charAt(i) != '0') && (fld.value.charAt(i) != decSep)) break;
aux = '';
for(; i < len; i++)
if (strCheck.indexOf(fld.value.charAt(i))!= -1) aux += fld.value.charAt(i);
aux += key;
len = aux.length;
if (len == 0) fld.value = '';
if (len == 1) fld.value = '0' + decSep + '0' + '0' + aux;
if (len == 2) fld.value = '0' + decSep + '0' + aux;
if (len == 3) fld.value = '0' + decSep + aux + aux2;
if (len > 3) {
aux2 = '';

for (j = 3, i = len - 4; i >= 0; i--) {
if (j == 3) {
aux2 += milSep;
j = 0;
}
aux2 += aux.charAt(i);
j++;
}
fld.value = '';
len2 = aux2.length;

for (i = len2 -1; i > 0; i--) // Alterei de i >= 0 para i > 0
fld.value += aux2.charAt(i);
fld.value += decSep + aux.substr(len - 3, len); // Número de casas após a vírgula
}
return false;

}
</script>


Valeu a força!!!

JR.
  • 0

#7 hunternh

hunternh

    Wagner B. Soares

  • Membros
  • 407 posts

Postado 11 abril 2007 - 11:05

De uma olhada nesse exemplo:

http://hunternh.110m...cara_moeda.html
  • 0

#8 jrjoliv2003

jrjoliv2003
  • Membros
  • 286 posts

Postado 11 abril 2007 - 16:45

hunternh , show de bola!!!

Hoje vou adaptar esse código a minha necessidade pois tenho que entregar rápido a tela. Mas pode ter certeza que vou estuda-lo.

Valeu a força!!!

JR.
  • 0




Publicidade

/ins>