Jump to content


Photo

Valorporextenso()


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

#1 Paulo André

Paulo André

    Why so serious?

  • Ex-Admins
  • 5114 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte - MG
  • Interesses:O.Q.F.J.?

Posted 22/06/2005, 21:28

Sintaxe: valorPorExtenso(STR VALOR)
Retorno: valor por extenso
Descrição: Chame a função passando algum valor monetário
Parâmetro. valor que o number_format entenda
Bibliotecas: Nenhuma
Limitações: PHP 4.0+

Função:
<?
function valorPorExtenso($valor=0) {
	$singular = array("centavo", "real", "mil", "milhão", "bilhão", "trilhão", "quatrilhão");
	$plural = array("centavos", "reais", "mil", "milhões", "bilhões", "trilhões",
"quatrilhões");

	$c = array("", "cem", "duzentos", "trezentos", "quatrocentos",
"quinhentos", "seiscentos", "setecentos", "oitocentos", "novecentos");
	$d = array("", "dez", "vinte", "trinta", "quarenta", "cinquenta",
"sessenta", "setenta", "oitenta", "noventa");
	$d10 = array("dez", "onze", "doze", "treze", "quatorze", "quinze",
"dezesseis", "dezesete", "dezoito", "dezenove");
	$u = array("", "um", "dois", "três", "quatro", "cinco", "seis",
"sete", "oito", "nove");

	$z=0;

	$valor = number_format($valor, 2, ".", ".");
	$inteiro = explode(".", $valor);
	for($i=0;$i<count($inteiro);$i++)
  for($ii=strlen($inteiro[$i]);$ii<3;$ii++)
 	 $inteiro[$i] = "0".$inteiro[$i];

	$fim = count($inteiro) - ($inteiro[count($inteiro)-1] > 0 ? 1 : 2);
	for ($i=0;$i<count($inteiro);$i++) {
  $valor = $inteiro[$i];
  $rc = (($valor > 100) && ($valor < 200)) ? "cento" : $c[$valor[0]];
  $rd = ($valor[1] < 2) ? "" : $d[$valor[1]];
  $ru = ($valor > 0) ? (($valor[1] == 1) ? $d10[$valor[2]] : $u[$valor[2]]) : "";
	
  $r = $rc.(($rc && ($rd || $ru)) ? " e " : "").$rd.(($rd &&
$ru) ? " e " : "").$ru;
  $t = count($inteiro)-1-$i;
  $r .= $r ? " ".($valor > 1 ? $plural[$t] : $singular[$t]) : "";
  if ($valor == "000")$z++; elseif ($z > 0) $z--;
  if (($t==1) && ($z>0) && ($inteiro[0] > 0)) $r .= (($z>1) ? " de " : "").$plural[$t]; 
  if ($r) $rt = $rt . ((($i > 0) && ($i <= $fim) &&
($inteiro[0] > 0) && ($z < 1)) ? ( ($i < $fim) ? ", " : " e ") : " ") . $r;
	}

	return($rt ? $rt : "zero");
}

?>

Exemplo de utilização:
<?=valorPorExtenso("650.70")?>
Até mais

Edição feita por: Frenesi, 21/06/2006, 09:56.

Paulo André G Rodrigues,
ex-administrador Fórum WMO.


www.CanalDev.com.br

#2 __dino__

__dino__

    24 Horas

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

Posted 21/06/2006, 09:49

funciona perfeito
mas os centavos naum funciona
www.anunciautos.com.br - venda e compre seu veiculo - GRÁTIS para anunciar

www.artweb7.com.br
www.clicgyn.com.br

#3 Paulo André

Paulo André

    Why so serious?

  • Ex-Admins
  • 5114 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte - MG
  • Interesses:O.Q.F.J.?

Posted 21/06/2006, 09:54

Pois é, falha minha ao demonstrar uma forma de utilização. :D
Não é vírgula e sim ponto que se deve usar.

Flws...
(ok2) Até mais
Paulo André G Rodrigues,
ex-administrador Fórum WMO.


www.CanalDev.com.br

#4 _vina

_vina

    Sem Avatar De Copa por 4 anos

  • Banidos
  • PipPipPipPipPip
  • 488 posts
  • Sexo:Não informado
  • Interesses:Música<br />PHP<br />Web

Posted 21/06/2006, 10:01

bem legal
funciono 100% :D
██████████████ 99% [Carregando]

$url = "http://www.viniciuscosta.tk";

Posted Image

#5 Cristiano Galdino

Cristiano Galdino

    Dark Defender

  • Administradores
  • 3738 posts
  • Sexo:Masculino
  • Localidade:Brasília, DF

Posted 06/07/2006, 01:23

De quem é essa função?
Eu acho que já vi ela na net mas não lembro o nome do autor.
Cristiano Galdino
- http://cristiano.galdino.net/

“Since 2003”


#6 Paulo André

Paulo André

    Why so serious?

  • Ex-Admins
  • 5114 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte - MG
  • Interesses:O.Q.F.J.?

Posted 06/07/2006, 08:02

Também não lembro, tenho uma pasta aqui só de funções pra poder utilizá-las quando for preciso, mas não sei de onde eu peguei essa.

Flws...
;) Até mais
Paulo André G Rodrigues,
ex-administrador Fórum WMO.


www.CanalDev.com.br

#7 Cristiano Galdino

Cristiano Galdino

    Dark Defender

  • Administradores
  • 3738 posts
  • Sexo:Masculino
  • Localidade:Brasília, DF

Posted 06/07/2006, 09:53

Também não lembro, tenho uma pasta aqui só de funções pra poder utilizá-las quando for preciso, mas não sei de onde eu peguei essa.

Eu também tenho uma pasta com funções, inclusive com essa.. :]
Eu lembro que no local que peguei essa tinha várias outras, tem uma que preciso que trabalha com XML, tenta lembrar aí... :þ
Cristiano Galdino
- http://cristiano.galdino.net/

“Since 2003”


#8 Paulo André

Paulo André

    Why so serious?

  • Ex-Admins
  • 5114 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte - MG
  • Interesses:O.Q.F.J.?

Posted 07/07/2006, 07:42

Ok, lembrei... :D
Foi no Linha de Código, acho que é essa qui: http://www.linhadeco...s...=279&sub=46

De XML lá só tem essa aqui:

XML easy parser
* Trabalha com qualquer documento XML aramazenado em arquivo ou variável;
* Recupera dados de qualquer elemento ou atributo;
* Indica quais elementos constituem o documento XML;
* Indica quais atributos pertencem a um elemento;
* Trata os erros exibindo a linha e destacando a coluna onde está o erro;
* Trabalha com entities externas.

http://www.linhadeco...s...=276&sub=46

Flws...
^_^Até mais
Paulo André G Rodrigues,
ex-administrador Fórum WMO.


www.CanalDev.com.br

#9 MarcoviZ

MarcoviZ

    ubuntu for human being

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

Posted 24/04/2009, 13:37

Descobri um erro, ao utilizar por exemplo o valor:

10590.00

ele me retorna:

dez mil e quinhentos e noventa reais

o correto seria:

dez mil, quinhentos e noventa reais

Estou fazendo um software financeiro e queria saber se essa forma de escrita é correta ou se posso ter problemas com isso.

Alguém se disponibiliza para ajeitar isso? auheua, ou me recomendem outra pode ser em javascript...

vlw

[]'s
[]'s

#10 S4ur0N

S4ur0N

    Ainda Normal

  • Usuários
  • 274 posts
  • Sexo:Não informado
  • Localidade:Blumenau - SC

Posted 04/05/2009, 12:04

Esse aqui funciona bem:

<?php


/*

	   Nome:  extenso.inc
	  Autor:  Jairo Raiol
	   Data:  28/02/2002
  Linguagem:  PHP 4
   Compilar:  -
	   Nota:  Esta funcao fornece o valor por extenso.

	Exemplo:  extenso( 12345678.90, "real", "reais", "centavo", "centavos" );

*/


function extenso( $valor, $moedaSing, $moedaPlur, $centSing, $centPlur ) {

   $valorExt = "";

   $centenas = array( 0,
	   array(0, "cento",		"cem"),
	   array(0, "duzentos",	 "duzentos"),
	   array(0, "trezentos",	"trezentos"),
	   array(0, "quatrocentos", "quatrocentos"),
	   array(0, "quinhentos",   "quinhentos"),
	   array(0, "seiscentos",   "seiscentos"),
	   array(0, "setecentos",   "setecentos"),
	   array(0, "oitocentos",   "oitocentos"),
	   array(0, "novecentos",   "novecentos") );

   $dezenas = array( 0,
			"dez",
			"vinte",
			"trinta",
			"quarenta",
			"cinquenta",
			"sessenta",
			"setenta",
			"oitenta",
			"noventa" );

   $unidades = array( 0,
			"um",
			"dois",
			"três",
			"quatro",
			"cinco",
			"seis",
			"sete",
			"oito",
			"nove" );

   $excecoes = array( 0,
			"onze",
			"doze",
			"treze",
			"quatorze",
			"quinze",
			"dezeseis",
			"dezesete",
			"dezoito",
			"dezenove" );

   $extensoes = array( 0,
	   array(0, "",	   ""),
	   array(0, "mil",	"mil"),
	   array(0, "milhão", "milhões"),
	   array(0, "bilhão", "bilhões"),
	   array(0, "trilhão","trilhões") );

   $valorForm = trim( number_format($valor,2,".",",") );

   $inicio	= 0;

   if ( $valor <= 0 ) {
	  return ( $valorExt );
   }

   for ( $conta = 0; $conta <= strlen($valorForm)-1; $conta++ ) {
	  if ( strstr(",.",substr($valorForm, $conta, 1)) ) {
		 $partes[] = str_pad(substr($valorForm, $inicio, $conta-$inicio),3," ",STR_PAD_LEFT);
		 if ( substr($valorForm, $conta, 1 ) == "." ) {
			break;
		 }
		 $inicio = $conta + 1;
	  }
   }

   $centavos = substr($valorForm, strlen($valorForm)-2, 2);

   if ( !( count($partes) == 1 and intval($partes[0]) == 0 ) ) {
	  for ( $conta=0; $conta <= count($partes)-1; $conta++ ) {

		 $centena = intval(substr($partes[$conta], 0, 1));
		 $dezena  = intval(substr($partes[$conta], 1, 1));
		 $unidade = intval(substr($partes[$conta], 2, 1));

		 if ( $centena > 0 ) {

			$valorExt .= $centenas[$centena][($dezena+$unidade>0 ? 1 : 2)] . ( $dezena+$unidade>0 ? " e " : "" );
		 }

		 if ( $dezena > 0 ) {
			if ( $dezena>1 ) {
			   $valorExt .= $dezenas[$dezena] . ( $unidade>0 ? " e " : "" );

			} elseif ( $dezena == 1 and $unidade == 0 ) {
			   $valorExt .= $dezenas[$dezena];

			} else {
			   $valorExt .= $excecoes[$unidade];
			}

		 }

		 if ( $unidade > 0 and $dezena != 1 ) {
			$valorExt .= $unidades[$unidade];
		 }

		 if ( intval($partes[$conta]) > 0 ) {
			$valorExt .= " " . $extensoes[(count($partes)-1)-$conta+1][(intval($partes[$conta])>1 ? 2 : 1)];
		 }

		 if ( (count($partes)-1) > $conta and intval($partes[$conta])>0 ) {
			$conta3 = 0;
			for ( $conta2 = $conta+1; $conta2 <= count($partes)-1; $conta2++ ) {
			   $conta3 += (intval($partes[$conta2])>0 ? 1 : 0);
			}

			if ( $conta3 == 1 and intval($centavos) == 0 ) {
			   $valorExt .= " e ";
			} elseif ( $conta3>=1 ) {
			   $valorExt .= ", ";
			}
		 }

	  }

	  if ( count($partes) == 1 and intval($partes[0]) == 1 ) {
		 $valorExt .= $moedaSing;

	  } elseif ( count($partes)>=3 and ((intval($partes[count($partes)-1]) + intval($partes[count($partes)-2]))==0) ) {
		 $valorExt .= " de " + $moedaPlur;

	  } else {
		 $valorExt = trim($valorExt) . " " . $moedaPlur;
	  }

   }

   if ( intval($centavos) > 0 ) {

	  $valorExt .= (!empty($valorExt) ? " e " : "");

	  $dezena  = intval(substr($centavos, 0, 1));
	  $unidade = intval(substr($centavos, 1, 1));

	  if ( $dezena > 0 ) {
		 if ( $dezena>1 ) {
			$valorExt .= $dezenas[$dezena] . ( $unidade>0 ? " e " : "" );

		 } elseif ( $dezena == 1 and $unidade == 0 ) {
			$valorExt .= $dezenas[$dezena];

		 } else {
			$valorExt .= $excecoes[$unidade];
		 }

	  }

	  if ( $unidade > 0 and $dezena != 1 ) {
		 $valorExt .= $unidades[$unidade];
	  }

	  $valorExt .= " " . ( intval($centavos)>1 ? $centPlur : $centSing );

   }

   return ( $valorExt );

}

?>

©2009 - Todos os direitos reservados.




1 user(s) are reading this topic

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

IPB Skin By Virteq