Jump to content


Photo

Problema Com Máscara E Divisão De Número


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

#1 psillus

psillus

    Normal

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

Posted 05/01/2011, 17:02

Amigos,

Antes de mais nada um excelente 2011 a todos!
Estou tentando fazer um formulário onde, o usuário entra com uma primeira informação (Moeda Real - com direito a centavos e tudo), entra com um número (número inteiro) e quando ele leva o cursor para um terceiro lugar/label, automaticamente o valor em reais é dividido pelo valor inteiro e o resultado é apresentado.

Para esta primeira etapa utilizei:
<script type="text/javascript">
// Script que encontra o resultado da operação de Salário hora
$(document).ready( function() {
                
  $('#salariomensal, #divisordehoras').blur(function(){
    var salariomensal = $("#salariomensal").val(); 
    var divisordehoras = $("#divisordehoras").val();
    var salariohora = ""
	
	if ((salariomensal == "") && (divisordehoras == "")) { salariohora = ""; }
	if ((salariomensal != "") && (divisordehoras == "")) { salariohora = ""; }
	if ((salariomensal != "") && (divisordehoras != "")) { salariohora = (parseInt(salariomensal) / parseInt(divisordehoras)); }
	
    $("#salariohora").val(salariohora);

  })

});
</script>

Até aí foi tudo legal!
Só que, eu precisei colocar o script maskMoney e o JQuery, para fazer com que o valor seja exibido em reais corretamente, tanto no preenchimento como após o envio do formulário.

$("#salariomensal").maskMoney({symbol:"",decimal:",",thousands:"."});
$("#salariohora").maskMoney({symbol:"",decimal:",",thousands:"."});

Aí, quando eu obtenho o resultado, os valores ficam errados, tipo:

Imaginando que salariomensal = 3000 e o valor que divide é 15...

R$ 3.000,00 / 15 = 0.2

Apesar de a máscara de R$ 3.000,00 aparecer corretamente, a operação que está sendo realizada está dividindo apenas o 3 pelo número 15 e não o 3000 (por causa do ponto). Se o número for < 1000 a conta fica correta.

Aí, surgem duas dúvidas:

1 - Está correto utilizar o parseInt(variavel) no trecho abaixo?

salariohora = (parseInt(salariomensal) / parseInt(divisordehoras));


Se não está correto, como eu tenho que fazer, já que eu tentei "parseFloat" e aí o script acima não funciona.

2 - Como posso utilizar a máscara para que a divisão seja feita corretamente e o resultado também apareça com a máscara?

Já fiz um monte de tentativas e todas deram erradas.
Alguém pode dar uma ajuda por favor?
Obrigado!
psillus

#2 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 05/01/2011, 19:12

Se o valor pode ter centavos, você deve mesmo usar o parseFloat. Acontece que precisa remover a máscara do valor antes de jogar no parse. Acho que o jeito mais fácil é com um replace deixar só os números:

var salariomensal = $("#salariomensal").val().replace(/[^0-9,]/,'').replace(/,/,'.');
Vê se vai.

#3 psillus

psillus

    Normal

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

Posted 05/01/2011, 22:03

Olá LeoB,

Muito obrigado por sua ajuda!
Eu já tinha chegado a uma resposta mais ou menos parecida mas que, assim como a sua, não permite que a máscara da resposta (salariohora) funcione.
Eu tinha feito assim:
if ((salariomensal != "") && (divisordehoras != "")) {   
	  salariomensal = salariomensal.replace(".", "")
	  salariomensal = salariomensal.replace(",", ".")
	  salariohora = (parseFloat(salariomensal) / parseInt(divisordehoras)).toFixed(2)
	  salariohora = salariohora.replace(".", ",") }

 	  $("#salariohora").val(salariohora);


Com sua ajuda mais profissional, o código ficou assim:

   if ((salariomensal != "") && (divisordehoras != "")) {   
	  var salariomensal = $("#salariomensal").val().replace(/[^0-9,]/,'').replace(/,/,'.');
	  salariohora = (parseFloat(salariomensal) / parseInt(divisordehoras))
	  salariohora = salariohora.toFixed(2)
	   }

    $("#salariohora").val(salariohora);

Mas em nenhum dos casos, mesmo tirando a formatação, a máscara de saída funciona.
$("#salariohora").maskMoney({symbol:"",decimal:",",thousands:"."});

Tens idéia de porquê?
Muito obrigado!
psillus

#4 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 05/01/2011, 22:27

Pelo que puder ver, o script que você está usando só aplica a máscara quando o campo perde o foco. Experimente forçar a execução do evento:

$("#salariohora").val(salariohora);
$("#salariohora").blur();

Edição feita por: LeoB, 05/01/2011, 22:27.


#5 psillus

psillus

    Normal

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

Posted 06/01/2011, 10:05

Oi LeoB,

Obrigado por sua nova resposta.
Eu não sou muito bom em Javascript, mas creio que, por interpretação da sua frase...

só aplica a máscara quando o campo perde o foco

Creio que não, já que enquanto eu estou digitando os números da entreda, a máscara já vai atuando e formatando.
Mesmo assim, tentei de diversas formas, já incluindo sua última sugestão e não houve alteração.
Não sei se é porque eu estou fazendo errado mas, creio que pode ser porque a máscara maskmoney é um script que roda por último e após a variável já estar "encerrada".
Tentei fazer:

$("#salariohora").val(salariohora).blur();

// + a máscara

$("#salariohora").maskMoney({symbol:"",decimal:",",thousands:"."});

outra

salariohora = salariohora.blur()
$("#salariohora").val(salariohora);

// + a máscara

$("#salariohora").maskMoney({symbol:"",decimal:",",thousands:"."});

e assim,

salariohora = salariohora.blur()
$("#salariohora").val(salariohora).blur().maskMoney({symbol:"",decimal:",",thousands:"."});

E não deu certo.
Desculpe as aberrações, mas entre uma cabeçada e outra eu vou entendendo mais.
Do jeito que está a saída atual, o únio problema é que o "ponto" do milhar não está aparecendo e os números ficam ex: 2345,23.
Você tem uma forma/script para mascarar está saída do milhar, que eu possa incluir no código acima?
Peguei na web algumas máscaras, mas todas elas falam em onpresskey ou se for Jquery utilizam o código que eu estou usando daí eu fico andando em círculos.
Obrigado!

psillus

#6 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 06/01/2011, 13:28

Tirei um tempo aqui pra analisar esse código. Realmente, do modo como o script foi feito, não tinha como a formatação acontecer do jeito que você queria. Então tive que fazer uma alteração no arquivo. Agora acho que vai:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR...ml4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Teste</title>
<script type="text/javascript" src="https://ajax.googlea...n.js"></script>
<script type="text/javascript" src="jquery.maskMoney.js"></script>
<script type="text/javascript">
$(document).ready(function() {

$('#salariomensal, #divisordehoras').blur(function(){

var salariomensal = $("#salariomensal").val().replace(/[^0-9,]/,'').replace(/,/,'.');
var divisordehoras = $("#divisordehoras").val();
var salariohora = "";

if ((salariomensal != "") && (divisordehoras != "")){
salariohora = (parseFloat(salariomensal) / parseInt(divisordehoras));
if(isNaN(salariohora)){
salariohora = "";
}else{
salariohora = salariohora.toFixed(2).toString().replace(/\./, ',');
}
}

$("#salariohora").val(salariohora);
$("#salariohora").trigger('maskMoney');

});

$("#salariomensal").maskMoney({symbol:"",decimal:",",thousands:"."});
$("#salariohora").maskMoney({symbol:"",decimal:",",thousands:"."});

});
</script>
</head>
<body>
<label>Salário Mensal: <input type="text" size="20" id="salariomensal"></label><br>
<label>Horas: <input type="text" size="20" id="divisordehoras"></label><br>
<label>Salário Hora: <input type="text" size="20" id="salariohora"></label>
</body>
</html>

Attached Files



#7 psillus

psillus

    Normal

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

Posted 06/01/2011, 20:18

LeoB
Mais uma vez muito obrigado por sua resposta e princialmente, por ter tirado um tempo para ajudar!
Veja, eu copiei 100% do código, utilizei o mesmo link que você do jQuery, no seu código, baixei a sua versão do maskMoney e não consegui fazer a saída imprimir o ponto do milhar.
Vou liberar o código assim mesmo pois, em conversa com o cliente, ele disse que nunca o valor atingirá 4 dígitos, sempre será no máximo 3.
Por um lado fico tranquilo, mas por outro, aquele lado fuçador fica P da vida de não ter conseguido.
Porém acho melhor seguir em frente e não gastar mais seu tempo com isto.
Tem outros brothers para você dar uma força.
Vou ficar brigando nas horas vagas e vendo se eu consigo.
Se conseguir eu volto e completo o tópico.
Valeu mesmo pela força!
psillus

#8 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 06/01/2011, 21:41

Não tinha reparado nisso. Falha minha mesmo. Agora está certo.

<script type="text/javascript">
$(document).ready(function() {

$('#salariomensal, #divisordehoras').blur(function(){

var salariomensal = $("#salariomensal").val().replace(/[^0-9,]/,'').replace(/,/,'.');
var divisordehoras = $("#divisordehoras").val();
var salariohora = "";

if ((salariomensal != "") && (divisordehoras != "")){
salariohora = (parseFloat(salariomensal) / parseInt(divisordehoras));
if(isNaN(salariohora)){
salariohora = "";
}else{
salariohora = salariohora.toFixed(2);
}
}

$("#salariohora").val(salariohora);
$("#salariohora").trigger('maskMoney');

});

$("#salariomensal").maskMoney({symbol:"",decimal:",",thousands:"."});
$("#salariohora").maskMoney({symbol:"",decimal:",",thousands:"."});

});
</script>

Attached Files



#9 psillus

psillus

    Normal

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

Posted 07/01/2011, 21:06

Oi LeoB,

Lamento mas a saída continua sem preencher o ponto da milhar.
Mas veja, isto se for "automático".
Se eu coloco o cursor no campo e preencho manualmente, aí ele acrescenta o ponto corretamente.
Mas como te disse, não esquenta a cabeça pois não será necessário chegar ao milhar.
Reitero meu sincero agradecimento a sua boa vontade.
Brigadão!
psillus

#10 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 07/01/2011, 21:30

Você não baixou o anexo que eu coloquei.

#11 psillus

psillus

    Normal

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

Posted 08/01/2011, 21:10

Oi LeoB,

Desculpe não foi por preguiça, achei que era o mesmo que você tinha postado anteriormente.
Baixei e instalei e, por fim, todo o seu tempo valeu a pena!
Está funcionando 100%, ficou muito bom mesmo!
Se eu não usar desta vez, já que o cliente disse que não vai chegar a 4 dígitos (mas já está lá), não tem problema pois este é o tipo de coisa que a gente precisa sempre.
Agradeço pela força!
Um abraço,
psilus

#12 LarPhozyHah

LarPhozyHah

    Super Veterano

  • Usuários
  • 14515 posts
  • Sexo:Masculino
  • Localidade:San Miguel de Tucuman

Posted 12/10/2017, 18:34

Overnight Meds Online Proviron Cialis Viagra Finto Scherzo viagra Acheter Le Kamagra Sale generic isotretinoin c.o.d. website
Levitra 5 Mg Nebenwirkungen Discount On Celebrex viagra Cialis Y Viagra Amoxil Acide Clavulanique

#13 Miguceamma

Miguceamma

    MiguPenjisse

  • Usuários
  • 13201 posts

Posted 13/10/2017, 07:46

Order Propecia Online generic viagra Prix Cialis En Belgique
The Effects Of 500mg Amoxicillin Amoxicillin Staph Infection viagra Generic Progesterone Menopause Mastercard Accepted Price Online Herbal Viagra Kaufen Bulk Cialis From Canada
Cialis Sample Pack Viagra Kaufen Rechnung best price on levitra Viagra Rezeptpflichtig Holland Legally Online Progesterone Visa Accepted Website C.O.D. Shipped Ups Viagra Bestellen Usa
Kamagra Pour Femme levitra discount Online Pharmacy No Rx
Want To Buy Isotretinoin viagra Best Online Levitra Atarax 25 Mg Fast Shipping Option
Cialis Belgique Ordonnance Accutane Online For Sale Levitra Rezeptfrei Auf Rechnung viagra Propecia Reasons High Blood Pressure
Discount Direct Generic Levaquin Get Online Salford Stendra Over Night Priligy 30 Mg Or 60 Mg viagra Cialis En Mano Madrid Viagra Efectos Foro
Cephalexin And Sunlight viagra online prescription Using Amoxicillin For Kennel Cough
Cialis India Online Amoxicillin 500 Mg Price viagra Failure To Refrigerate Amoxicillin
Propecia Pve Priligy Equivalent buy viagra online Isotretinoin roaccutane how to buy Viagra E Doping Kamagra Heart Disease
Zithromax In India Tomar Propecia Lactosa Monohidrato viagra online pharmacy Acquisto Cialis 5 Mg Propecia Itch Skin
Acheter Du Cialis A Marseille Pain Meds Online Overnight Zithromax Z viagra Viagra Ayuda Eyaculador Precoz

#14 RonsisM

RonsisM

    Super Veterano

  • Usuários
  • 15724 posts
  • Sexo:Masculino
  • Localidade:Plovdiv

Posted 13/10/2017, 15:11

Principio Attivo Paroxetina Comprare Levitra Generico Senza online pharmacy Kamagra Prices
Propecia De Por Vida Macrobid Urinary Tract Infections Without A Script levitra 20mg tablets mfg gsk Levitra Prezzi Donde Comprar Levitra Espana Buy Cialis Legally Online 438
Come Comprare Il Viagra In Farmacia Resultados Propecia viagra cialis Vendita Levitra Generico Hyzaar Buy Colchicine 0.5 Mg Europe
Baclofene Internet Macrobid Niftran Bacterial Infections Buy Tamoxifen In Uk cialis Motilium Online No Prescription Zithromax Use In Pregnancy
Doxycycline Without Prescription Sinus Infection Cephalexin Or Clarithromycin No Prescription Strattera online pharmacy Tamoxifen Buy Online Uk
Viagra Precio Vademecum Levitra Generika Oder Original viagra online Buying Levitra Online Without Prescription Priligy Pharmacie En Ligne
Taking Cephalexin While Breastfeeding Priligy In Italia Costo Levitra buy viagra Vendita Viagra Online

#15 LarPhozyHah

LarPhozyHah

    Super Veterano

  • Usuários
  • 14515 posts
  • Sexo:Masculino
  • Localidade:San Miguel de Tucuman

Posted 28/10/2017, 13:47

Comprar Cialis Murcia Amoxicillin And Pregnant Buy Cialis 40 Mg No Prescription cialis, viagra levitra Propecia 98 Preis
Viagra Foto Effetti Lioresal 40 Mg viagra Cialis Y Viagra Spertomax Kamagra Uk Viagra




0 user(s) are reading this topic

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

IPB Skin By Virteq