Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Eu estou readaptando uma função que formata valores em moeda, para que possa ser inserido no banco, valores com 6 casas decimais. Mas estou tendo problemas, quando o valor digitado for maior que 999,999999. A função funciona perfeitamente quando são digitados valores menores que 1.000, mas igual ou maior que esse valor, a função deixa de formata com 6 casas decimais e passa a formatar com 5 casas decimais. Segue o código a baixo:
A FUNÇÂO:
function Formata(campo,tammax,teclapres,decimal) {
var tecla = teclapres.keyCode;
vr = Limpar(campo.value,"0123456789");
tam = vr.length;
dec=decimal
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 <= dec )
{ campo.value = vr ; }
if ( (tam > dec) && (tam <= 9) ){
campo.value = vr.substr( 0, tam - 6 ) + "," + vr.substr( tam - 6, tam ) ; }
if ( (tam >= 10) && (tam <= 12) ){
campo.value = vr.substr( 0, tam - 9 ) + "." + vr.substr( tam - 9, 3 ) + "," + vr.substr( tam - 6, tam ) ;}
if ( (tam >= 13) && (tam <= 15) ){
campo.value = vr.substr( 0, tam - 12 ) + "." + vr.substr( tam - 12, 3 ) + "." + vr.substr( tam - 9, 3 ) + "," + vr.substr( tam - 6, tam ) ; }
if ( (tam >= 16) && (tam <= 18) ){
campo.value = vr.substr( 0, tam - 15 ) + "." + vr.substr( tam - 15, 3 ) + "." + vr.substr( tam - 12, 3 ) + "." + vr.substr( tam - 9, 3 ) + "," + vr.substr( tam - 6, tam ) ; }
if ( (tam >= 19) && (tam <= 21) ){
campo.value = vr.substr( 0, tam - 18 ) + "." + vr.substr( tam - 18, 3 ) + "." + vr.substr( tam - 15, 3 ) + "." + vr.substr( tam - 12, 3 ) + "." + vr.substr( tam - 9, 3 ) + "," + vr.substr( tam - 6, tam ) ;}
}
}
No FORM
<td> <input type="text" name="vlcota" maxlength="20" onKeydown="Formata(this,20,event,6)" style='text-align:right; border:1px solid black; font-size:9pt; font-weight:bold; color: #000088; width:120px; height:20px;'> <font face="Arial" size="-6" color="#000009"><b>Valor máximo: 9.999.999,999999</b></font></td>
O que está errado no código da função que está causando esse erro na formatação durante a digitação ?
Desde já agradeço pela atenção.
Cara, 'muito complicada' ^_^
dá uma olhada nessa usando Expressão Regular. Se você quiser mais digitos, basta completar a ER.
http://forum.imasters.com.br/index.php?/topic/392605-mascara-numerica/page__view__findpost__p__1531437