Ir para conteúdo
Fórum Script Brasil
  • 0

Converter Moeda


ODRACIR

Pergunta

Estou iniciando em javascript e peguei um código pronto de uma Loja Virtual (lojavirtual-js) e gostaria de obter ajuda para que a função abaixo

seja transformada para a moeda brasileira. No mesmo código já estabelece uma variável MonetarySymbol = '$'; que eu mudei para R$, mais só

o símboleo funciona o resto não, alguém pode me ajudar?

//---------------------------------------------------------------------||
// FUNCTION:    MoneyFormat                                            ||
// PARAMETERS:  Number to be formatted                                 ||
// RETURNS:     Formatted Number                                       ||
// PURPOSE:     Reformats Dollar Amount to #.## format                 ||
//---------------------------------------------------------------------||
function moneyFormat(input) {
   var dollars = Math.floor(input);
   var tmp = new String(input);

   for ( var decimalAt = 0; decimalAt < tmp.length; decimalAt++ ) {
      if ( tmp.charAt(decimalAt)=="," )
         break;
   }

   var cents  = "" + Math.round(input * 100);
   cents = cents.substring(cents.length-2, cents.length)
           dollars += ((tmp.charAt(decimalAt+2)=="9")&&(cents=="00"))? 1 : 0;

   if ( cents == "0" )
      cents = "00";

   return(dollars + "," + cents);
}

Link para o comentário
Compartilhar em outros sites

13 respostass a esta questão

Posts Recomendados

  • 0

Aos 55 anos e sonhando ter um Portal na Internet é meio brabo. Não sei como funciona um forum, é a primeira vez que me cadastrei e postei uma dúvida.

Acho até que esta dúvida deve ser fácil de resolver, haja vista, o excelente nível de domínio do JavaScript pelos participantes.

Entretanto, até o momento não tive o socorro esperado e necessito resolver este pequeno problema para colocar meu portal no ar.

Se não for pedir muito gostaria que alguém da alta c*pula do Fórum intercedesse a meu favor e me desse essa ajudinha.

Desde já a casa agradece penhorosamente.

Link para o comentário
Compartilhar em outros sites

  • 0

essa funcao transforma um valor 9999.99 no formato 9999,99, o q você queria q acontecesse q não acontece??

se você queria tipo assim: 9.999.99 com ponto, então troque a linha:

return(dollars + "," + cents);
por:
var formato = "";
var valor = String(dollars);
for (var num = valor.length - 3; num >= 0; num = num - 3)
{
    formato = valor.substring(num, num + 3) + (formato != "" ? "." : "") + formato;
}
formato = (valor.substring(num + 3, 0) != "" ? valor.substring(num + 3, 0) + (formato != "" ? "." : "") : "") + formato;

return(formato + "," + cents);[/code]

Link para o comentário
Compartilhar em outros sites

  • 0

mano q é q ce ta falando?? pelo q eu entendi é sobre esse tópico certo: http://scriptbrasil.com.br/forum/index.php?showtopic=110188 ??

se for esse o caso, então tenta sempre explicar melhor qual é a sua duvida, beleza?? quando você disse "mais só o símboleo funciona o resto não", provavelmente ninguém entendeu do q se tratava, já q a gente não sabe o q é "o resto" e COMO deveria funcionar. você q quer usar a funcao e a gente não tem como saber o q você quer dela.

provavelmente por isso ninguém te deu resposta.

postei uma resposta la mas não sei se é isso q você quer. como você não explicou direito, eu posso ter postado uma solucao q não vai ajudar, ou seja, posso ter perdido meu tempo postando. ou seja, se você explicar melhor, facilita pra nós e pra você, beleza??

na hora de postar tenta se imaginar lendo o tópico pra ver se você entenderia o q esta escrito.

Link para o comentário
Compartilhar em outros sites

  • 0

bom, o pior de tudo é que dois usuarios se dispuseram a tentar te ajudar e voce nem retorno deu...

Além daquela velha historia que estamos aqui apenas como "voluntarios", apenas com o prazer de ajudar. Se voce não obteve a resposta do problema é porque você não explicou suficientemente bem ou porque todos que leram seu tópico não souberam ajudar.

então, primeiramente, va ao seu post e resposta aos usuarios que responderam seu tópico.

Ps.: não entendi o titulo do tópico...

Att.

SAC SB

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Noriva (deslogado de novo!)

Prezado senhor acho que o recomendável para seu caso é procurar um profissional da área que lhe disponibilize este serviço, aqui vão algumas indicações:

http://www.nrv.brservidor.com/servicos_res...ar=loja+virtual

http://www.genilho.com

http://www.edgarserra.com/blog

Explicação:

O projeto cujo o senhor quer desenvolver é muito complexo para se aprender da noite para o dia, se trata de uma loja virtual com muitas complicações inclusive em termos burocráticos que somente uma pessoa com experiênciaa já nisso poderia lhe ajudar

Link para o comentário
Compartilhar em outros sites

  • 0

Obrigado pelas dicas.

Obrigado pelo puxão de orelha. Na verdade ando muito ocupado. Agradeço muito sua atenção. Admito não ter explicado muito bem a minha dúvida.

Caso tenha interesse em continuar me ajudando, visite www.comocomprarbem.com.br e selecione ver detalhes e inclua na lista. O resultado parece

correto mais não é. Se adicionar mais de um produto verá que os centavos não estão sendo somados. Acontece que essa rotina eu peguei de uma loja

virtual que baixei aí no scriptbrasil, o nome dela é lojavistual-js. Nela existem 3 arquivos que reporduzem o resultado da lista de compras, são eles:

- managecart.html;

- language-br.js;

- media.js;

- nopcart.js.

No arquivo nopcart.js tem a função abaixo que formata a moeda para dolar e eu gostaria que alguém me ajudasse em fazer com que a referida funçao

formatasse a moeda para real, por que no banco de dados de preços dos anúncios está em real.

//---------------------------------------------------------------------||
// FUNCTION:    MoneyFormat                                              ||
// PARAMETERS:  Number to be formatted                             ||
// RETURNS:     Formatted Number                                       ||
// PURPOSE:     Reformats Dollar Amount to #.## format      ||
//---------------------------------------------------------------------||
function moneyFormat(input) {
   var dollars = Math.floor(input);
   var tmp = new String(input);

   for ( var decimalAt = 0; decimalAt < tmp.length; decimalAt++ ) {
      if ( tmp.charAt(decimalAt)=="." )
         break;
   }

   var cents  = "" + Math.round(input * 100);
   cents = cents.substring(cents.length-2, cents.length)
           dollars += ((tmp.charAt(decimalAt+2)=="9")&&(cents=="00"))? 1 : 0;

   if ( cents == "0" )
      cents = "00";

   return(dollars + "." + cents);
}
Desde já me desculpe pela indelicadeza de não responder a todos (é que estou procurando em vários foruns e não tive sucesso) Obrigado Ricardo. Obrigado pela sua atenção. O que na realidade preciso é que a função abaixo faça a formatação para a moeda real e não para dolar.
//---------------------------------------------------------------------||
// FUNCTION:    MoneyFormat                                            ||
// PARAMETERS:  Number to be formatted                                 ||
// RETURNS:     Formatted Number                                       ||
// PURPOSE:     Reformats Dollar Amount to #.## format                 ||
//---------------------------------------------------------------------||
function moneyFormat(input) {
   var dollars = Math.floor(input);
   var tmp = new String(input);

   for ( var decimalAt = 0; decimalAt < tmp.length; decimalAt++ ) {
      if ( tmp.charAt(decimalAt)=="." )
         break;
   }

   var cents  = "" + Math.round(input * 100);
   cents = cents.substring(cents.length-2, cents.length)
           dollars += ((tmp.charAt(decimalAt+2)=="9")&&(cents=="00"))? 1 : 0;

   if ( cents == "0" )
      cents = "00";

   return(dollars + "." + cents);
}

Link para o comentário
Compartilhar em outros sites

  • 0

aiaiai ai q ta o problema. primeira coisa, aqui não é lugar pra pedir ajuda de javascript, você devia ter postado na sala de javascript e de preferencia naquele tópico q você já criou

mas esse é o problema: o q você quer dizer com a moeda ser formatada em real?? qual o formato do real??

isso é uma coisa completamente relativa, qualquer um poe o formato q quiser, e não importa o valor ou formato q teja, é você (quem faz o site) quem diz se é dolar ou real ou euro ou o q for.

o q você tem q nos dizer é, se você quer o formato assim 9.999,99 ou assim 9,999.99 ou assim R$ 9.999,99 e etc.

ou por um acaso você tem o VALOR em dolar e quer converter o VALOR pra real baseado na cotacao??

ate agora não da pra ter ideia do q você realmente quer.

Link para o comentário
Compartilhar em outros sites

  • 0

Desde o início eu postei minha dúvida na seção Javascript e não sei o porque que você e outra pessoa chegaram até minha dúvida, não foi minha culpa,

e como disse se estou fazendo algo de errado é por pura ignorância (falta de conhecimento).

O que quero é que a função gere R$99.999,00 o que não está acontecendo.

Se você puder encaminhar para alguém que possa ajudar eu agradeço penhorosamente.

Link para o comentário
Compartilhar em outros sites

  • 0

Se eu entendí bem, você quer inserir os valores no script dessa forma: 352,20

E quer que a saída dele fique dessa forma: R$ 352,20

Correto?

A função para isso ficará assim:

//---------------------------------------------------------------------||
// FUNCTION:    MoneyFormat                                              ||
// PARAMETERS:  Number to be formatted                             ||
// RETURNS:     Formatted Number                                       ||
// PURPOSE:     Reformats Dollar Amount to #.## format      ||
//---------------------------------------------------------------------||
function moneyFormat(input) {
   var dollars = Math.floor(input);
   var tmp = new String(input);

   for ( var decimalAt = 0; decimalAt < tmp.length; decimalAt++ ) {
      if ( tmp.charAt(decimalAt)=="," )
         break;
   }

   var cents  = "" + Math.round(input * 100);
   cents = cents.substring(cents.length-2, cents.length)
           dollars += ((tmp.charAt(decimalAt+2)=="9")&&(cents=="00"))? 1 : 0;

   if ( cents == "0" )
      cents = "00";

   return("R$" + dollars + "," + cents);
}

Estou movendo este tópico para a área de JavaScript, e peço para que, por favor, os moderadores dessa área mesclem seus tópicos para que seja mais fácil responder às suas dúvidas.

Obrigado!

Link para o comentário
Compartilhar em outros sites

  • 0
Desde o início eu postei minha dúvida na seção Javascript e não sei o porque que você e outra pessoa chegaram até minha dúvida, não foi minha culpa,

no outro tópico a gente tava discutindo se tavamos ajudando ou não. o tópico na secao de javascript era o tópico em q a gente tava discutindo a funcao, e era nele q você deveria continuar postando sobre a funcao, e não no tópico na sala principal.

mas agora os topicos tão mesclados então ta tudo certo.

O que quero é que a função gere R$99.999,00 o que não está acontecendo.

a resposta pra isso eu já passei nesse post aqui: http://scriptbrasil.com.br/forum/index.php...st&p=457122

e ai era so você adicionar na frente o R$ (o q você disse já tinha consguido fazer) assim como no exemplo do lucifer.

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --Odracir1952 --

Obrigado, resolveu em parte, entretanto, quando há uma soma os centavos são desconsiderados.

Quando busca a informação no banco de dados é assim

formatnumber(rs(preço_normal),2) ou seja, no bd esta registrado 12,90 aí na tela aparece R$12,90,

quando pego essa mesma variável e somo vários valores os centavos não são considerados por que

a maneira de mostrar é essa:

//---------------------------------------------------------------------||
// FUNCTION:    ManageCart                                             ||
// PARAMETERS:  Null                                                   ||
// RETURNS:     Product Table Written to Document                      ||
// PURPOSE:     Draws current cart product table on HTML page          ||
//---------------------------------------------------------------------||
function ManageCart( ) {
   var iNumberOrdered = 0;    //Number of products ordered
   var fTotal         = 0;    //Total cost of order
   var fTax           = 0;    //Tax amount
   var fShipping      = 0;    //Shipping amount
   var strTotal       = "";   //Total cost formatted as money
   var strTax         = "";   //Total tax formatted as money
   var strShipping    = "";   //Total shipping formatted as money
   var strOutput      = "";   //String to be written to page
   var bDisplay       = true; //Whether to write string to the page (here for programmers)

   iNumberOrdered = GetCookie("NumberOrdered");
   if ( iNumberOrdered == null )
      iNumberOrdered = 0;

   if ( bDisplay )
      strOutput = "<TABLE CLASS=\"nopcart\"><TR>" +
                  "<TD CLASS=\"nopheader\"><B>"+strILabel+"</B></TD>" +
                  "<TD CLASS=\"nopheader\"><B>"+strDLabel+"</B></TD>" +
                  "<TD CLASS=\"nopheader\"><B>"+strQLabel+"</B></TD>" +
                  "<TD CLASS=\"nopheader\"><B>"+strPLabel+"</B></TD>" +
                  (DisplayShippingColumn?"<TD CLASS=\"nopheader\"><B>"+strSLabel+"</B></TD>":"") +
                  "<TD CLASS=\"nopheader\"><B>"+strRLabel+"</B></TD></TR>";

   if ( iNumberOrdered == 0 ) {
      strOutput += "<TR><TD COLSPAN=6 CLASS=\"nopentry\"><CENTER><BR><B>SUA LISTA DE COMPRAS ESTÁ VAZIA!!!</B><BR><BR></CENTER></TD></TR>";
   }

   for ( i = 1; i <= iNumberOrdered; i++ ) {
      NewOrder = "Order." + i;
      database = "";
      database = GetCookie(NewOrder);

      Token0 = database.indexOf("|", 0);
      Token1 = database.indexOf("|", Token0+1);
      Token2 = database.indexOf("|", Token1+1);
      Token3 = database.indexOf("|", Token2+1);
      Token4 = database.indexOf("|", Token3+1);

      fields = new Array;
      fields[0] = database.substring( 0, Token0 );                 // Product ID
      fields[1] = database.substring( Token0+1, Token1 );          // Quantity
      fields[2] = database.substring( Token1+1, Token2 );          // Price
      fields[3] = database.substring( Token2+1, Token3 );          // Product Name/Description
      fields[4] = database.substring( Token3+1, Token4 );          // Shipping Cost
      fields[5] = database.substring( Token4+1, database.length ); //Additional Information

      fTotal     += (parseInt(fields[1]) * parseFloat(fields[2]) );
 //     fShipping  += (parseInt(fields[1]) * parseFloat(fields[4]) );
 //     fTax        = (fTotal * TaxRate);
      strTotal    = fTotal;
 //     strTax      = fTax;
 //     strShipping = fShipping;

      if ( bDisplay ) {
         strOutput += "<TR><TD CLASS=\"nopentry\">"  + fields[0] + "</TD>";

         if ( fields[5] == "" )
            strOutput += "<TD CLASS=\"nopentry\">"  + fields[3] + "</TD>";
         else
            strOutput += "<TD CLASS=\"nopentry\">"  + fields[3] + " - <I>"+ fields[5] + "</I></TD>";

         strOutput += "<TD CLASS=\"nopentry\"><INPUT TYPE=TEXT NAME=Q SIZE=2 VALUE=\"" + fields[1] + "\" onChange=\"ChangeQuantity("+i+", this.value);\"></TD>";
         strOutput += "<TD CLASS=\"nopentry\">"+ MonetarySymbol + fields[2] + "</TD>";

         if ( DisplayShippingColumn ) {
            if ( parseFloat(fields[4]) > 0 )
               strOutput += "<TD CLASS=\"nopentry\">"+ MonetarySymbol + fields[4] + "</TD>";
            else
               strOutput += "<TD CLASS=\"nopentry\">N/A</TD>";
         }

         strOutput += "<TD CLASS=\"nopentry\" ALIGN=CENTER><input type=button value=\" "+strRButton+" \" onClick=\"RemoveFromCart("+i+")\" class=\"nopbutton\"></TD><P><P></TR>";
      }

      if ( AppendItemNumToOutput ) {
         strFooter = i;
      } else {
         strFooter = "";
      }
      if ( HiddenFieldsToCheckout ) {
         strOutput += "<input type=hidden name=\"" + OutputItemId        + strFooter + "\" value=\"" + fields[0] + "\">";
         strOutput += "<input type=hidden name=\"" + OutputItemQuantity  + strFooter + "\" value=\"" + fields[1] + "\">";
         strOutput += "<input type=hidden name=\"" + OutputItemPrice     + strFooter + "\" value=\"" + fields[2] + "\">";
         strOutput += "<input type=hidden name=\"" + OutputItemName      + strFooter + "\" value=\"" + fields[3] + "\">";
         strOutput += "<input type=hidden name=\"" + OutputItemShipping  + strFooter + "\" value=\"" + fields[4] + "\">";
         strOutput += "<input type=hidden name=\"" + OutputItemAddtlInfo + strFooter + "\" value=\"" + fields[5] + "\">";
      }

   }

   if ( bDisplay ) {
      strOutput += "<TR><TD CLASS=\"noptotal\" COLSPAN=3><B>"+ strSUB +"</B></TD>";
      strOutput += "<TD CLASS=\"noptotal\" COLSPAN=2><B>" + moneyFormat(strTotal) + "</B></TD>";
      strOutput += "</TR>";

      if ( HiddenFieldsToCheckout ) {
         strOutput += "<input type=hidden name=\""+OutputOrderSubtotal+"\" value=\""+ moneyFormat(strTotal) + "\">";
         
      }
   }
   g_TotalCost = fTotal;

   document.write(strOutput);
   document.close();
}

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...