jsLogger.logger("Library Loaded: Numericas", jsLogger.DEBUG); var valoresAntigos = new Map(); function checarValores(field) { if (!checkFloat(field)) { var valor = valoresAntigos.get(field); if (valor == null) { valor = ""; } field.value = valor; } else { valoresAntigos.add(field, field.value); } } function formataDecimalCampo(field, casas) { var valor = formataDecimal(field.value, casas); if (valor != null) { field.value = valor; return true; } else { alert("Digite um preço válido."); field.focus(); } } function formataDecimal(valor, casas, inverteDecimal) { valor = valor + ""; valor = valor.replace(",","."); if (isNaN(casas)) { casas = 2; } //Verifica se o argumento é um número. Se não for, retonará null. if (isNaN(parseFloat(valor))) { return null; } var parteInteira = "0"; var parteDecimal = "00"; //Quebra o valor em sua parte inteira e decimal if (valor.indexOf(".") != -1) { var valorQuebrado = valor.split("."); if ((valorQuebrado[0] != null) && (valorQuebrado[0] != "")) { parteInteira = valorQuebrado[0]; } if ((valorQuebrado[1] != null) && (valorQuebrado[1] != "")) { parteDecimal = valorQuebrado[1]; } } else { parteInteira = valor; } return formataDecimalImp(parteInteira, parteDecimal, casas, inverteDecimal); } function formataDecimalImp(parteInteira, parteDecimal, casas, inverteDecimal) { //Formata a parte inteira parteInteira = parteInteira.replace(".", ""); var negativo = false; if (parteInteira.charAt(0) == "-") { negativo = true; parteInteira = parteInteira.substr(1); } while (true) { if ((parteInteira.substr(0,1) == "0") && (parteInteira.length > 1)) { parteInteira = parteInteira.substr(1); } else { break; } } //Bug do Javascript while (parteInteira.indexOf(".") != -1) { parteInteira = parteInteira.replace(".", ""); } var unidades = quebraString(parteInteira, 3); parteInteira = unidades[0]; for (var i = 1; i < unidades.length; i++) { parteInteira = parteInteira + "." + unidades[i]; } if (negativo) { parteInteira = "-" + parteInteira; } //Formata a parte decimal if (inverteDecimal != true) { var valorArredondado = (Math.floor(parseFloat("0." + parteDecimal) * Math.pow(10, casas) + 0.5) / Math.pow(10, casas)) + ""; //Arredonda o valor e o converte para String if (valorArredondado.indexOf(".") != -1) { parteDecimal = valorArredondado.split(".")[1]; } else { parteDecimal = "0"; } } var diferencaCasas = casas - parteDecimal.length; for (var i = 0; i < diferencaCasas; i++) { if (inverteDecimal) { parteDecimal = "0" + parteDecimal; } else { parteDecimal = parteDecimal + "0"; } } valor = parteInteira; if (casas > 0) { valor += "," + parteDecimal.substr(0,casas); } return valor; } function mascaraDecimal(casas, maxlength, valorPadrao) { var campo = event.srcElement; //Valores padrão if ((isNaN(maxlength)) || (maxlength > 15)) { maxlength = 15; } if (isNaN(casas)) { casas = 2; } //Verificação do digito if ((event.keyCode == 67) && (event.ctrlKey == true)) { //CTRL + C return; } if ((event.keyCode == 45) && (event.ctrlKey == true)) { //CTRL + Insert return; } if ((event.keyCode >= 37) && (event.keyCode <= 40)) { //Setas return; } if (event.keyCode == 9) { //Tab return; } if (event.keyCode == 46) { //Delete if ((valorPadrao != null) && (!isNaN(valorPadrao))) valorPadrao = formataDecimal(valorPadrao, casas); else valorPadrao = ""; campo.value = valorPadrao; return; } event.returnValue = false; var digito = parseNumberCaracter(event.keyCode); if (isNaN(digito)) { digito = null; } var valor = campo.value.replace(",", "").replace(".", ""); //Backspace if (event.keyCode == 8) { valor = valor.substr(0, (valor.length-1)); digito = ""; } else { if ((valor.length >= maxlength) || (digito == null)) { return; } } var valor = valor + digito; var parteInteira = "0"; var substrConst = casas; if (valor.length <= casas) { substrConst = valor.length; } else { parteInteira = valor.substr(0, valor.length - substrConst); } //Calcula a parte decimal var parteDecimal = valor.substr(valor.length - substrConst); campo.value = formataDecimalImp(parteInteira ,parteDecimal, casas, true); }