Jump to content
Fórum Script Brasil
  • 0

Converter Moeda


ODRACIR
 Share

Question

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 to comment
Share on other sites

13 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

  • 0
Guest Odracir

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 to comment
Share on other 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 to comment
Share on other sites

  • 0
Guest Odracir

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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      150.1k
    • Total Posts
      647.1k
×
×
  • Create New...