Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Augusto Santos

Mostrar o preço como um formato de número

Recommended Posts

Bom dia amigos,

 

 

 

 

Estou trabalhando com um Script que exibe preços no seguinte formato por exemplo:

 

R$ 2000 (Dois mil)

 

R$ 20000 (Vinte mil)

 

R$ 200000 ( Duzentos mil)

 

R$ 2000000 ( Dois milhões)

 

 

Eu preciso incluir apenas o ponto, a vírgula não é necessária para obter esse retorno:

 

 

R$ 2.000

 

R$ 20.000

 

R$ 200.000

 

R$ 2.000.000

 

 

 

 

Eu tenho o seguinte código para efetuar a alteração:

 

 

<?php echo $this->_currency->getSymbol().$this->_view->escape($entry['property_price']); ?>

 

 

Então fica assim? Ou tenho que inserir outros parâmetros?

 

 

 

<?php echo $this->_currency-> getSymbol(".").number_format($this->_view->escape($entry['property_price'])); ?>

 

 

 

Se alguém me dar um Help agradeço!

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo neste caso eu faria as condições com o javascript, faria até sua aplicação ficar um pouco mais leve.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, é bem mais simples usar a função money_format para formatar um valor monetário...

 

Exemplo:

setlocale(LC_MONETARY, 'pt_BR');

$arr[]= money_format("%10.2n", 2000);
$arr[]= money_format("%10.2n", 2000.35);
$arr[]= money_format("%10.2n", 20000);
$arr[]= money_format("%10.2n", 200500);

echo implode("<br>\n", $arr);

Resultado:

R$ 2.000,00
R$ 2.000,35
R$ 20.000,00
R$ 200.500,00

 

Mas atenção: essa função não funciona no Windows. Se você quer que isso funcione também no Windows, deve também declarar esta função (Obs.: o código a seguir precisa ser colocado ANTES de chamar por money_format):

 

if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
    
    /*
    function money_format
    author: Rafael M. Salvioni
    */

    /* 
    That it is an implementation of the function money_format for the 
    platforms that do not it bear.  

    The function accepts to same string of format accepts for the 
    original function of the PHP.  
    
    (Sorry. my writing in English is very bad)  
    
    The function is tested using PHP 5.1.4 in Windows XP 
    and Apache WebServer. 
    */

    function money_format($format, $number) 
    { 
        $regex  = '/%((?:[\^!\-]|\+|\(|\=.)*)([0-9]+)?'. 
                  '(?:#([0-9]+))?(?:\.([0-9]+))?([in%])/'; 
        if (setlocale(LC_MONETARY, 0) == 'C') { 
            setlocale(LC_MONETARY, ''); 
        } 
        $locale = localeconv(); 
        preg_match_all($regex, $format, $matches, PREG_SET_ORDER); 
        foreach ($matches as $fmatch) { 
            $value = floatval($number); 
            $flags = array( 
                'fillchar'  => preg_match('/\=(.)/', $fmatch[1], $match) ? 
                               $match[1] : ' ', 
                'nogroup'   => preg_match('/\^/', $fmatch[1]) > 0, 
                'usesignal' => preg_match('/\+|\(/', $fmatch[1], $match) ? 
                               $match[0] : '+', 
                'nosimbol'  => preg_match('/\!/', $fmatch[1]) > 0, 
                'isleft'    => preg_match('/\-/', $fmatch[1]) > 0 
            ); 
            $width      = trim($fmatch[2]) ? (int)$fmatch[2] : 0; 
            $left       = trim($fmatch[3]) ? (int)$fmatch[3] : 0; 
            $right      = trim($fmatch[4]) ? (int)$fmatch[4] : $locale['int_frac_digits']; 
            $conversion = $fmatch[5]; 

            $positive = true; 
            if ($value < 0) { 
                $positive = false; 
                $value  *= -1; 
            } 
            $letter = $positive ? 'p' : 'n'; 

            $prefix = $suffix = $cprefix = $csuffix = $signal = ''; 

            $signal = $positive ? $locale['positive_sign'] : $locale['negative_sign']; 
            switch (true) { 
                case $locale["{$letter}_sign_posn"] == 1 && $flags['usesignal'] == '+': 
                    $prefix = $signal; 
                    break; 
                case $locale["{$letter}_sign_posn"] == 2 && $flags['usesignal'] == '+': 
                    $suffix = $signal; 
                    break; 
                case $locale["{$letter}_sign_posn"] == 3 && $flags['usesignal'] == '+': 
                    $cprefix = $signal; 
                    break; 
                case $locale["{$letter}_sign_posn"] == 4 && $flags['usesignal'] == '+': 
                    $csuffix = $signal; 
                    break; 
                case $flags['usesignal'] == '(': 
                case $locale["{$letter}_sign_posn"] == 0: 
                    $prefix = '('; 
                    $suffix = ')'; 
                    break; 
            } 
            if (!$flags['nosimbol']) { 
                $currency = $cprefix . 
                            ($conversion == 'i' ? $locale['int_curr_symbol'] : $locale['currency_symbol']) . 
                            $csuffix; 
            } else { 
                $currency = ''; 
            } 
            $space  = $locale["{$letter}_sep_by_space"] ? ' ' : ''; 

            $value = number_format($value, $right, $locale['mon_decimal_point'], 
                     $flags['nogroup'] ? '' : $locale['mon_thousands_sep']); 
            $value = @explode($locale['mon_decimal_point'], $value);

            $n = strlen($prefix) + strlen($currency) + strlen($value[0]); 
            if ($left > 0 && $left > $n) { 
                $value[0] = str_repeat($flags['fillchar'], $left - $n) . $value[0]; 
            } 
            $value = implode($locale['mon_decimal_point'], $value); 
            if ($locale["{$letter}_cs_precedes"]) { 
                $value = $prefix . $currency . $space . $value . $suffix; 
            } else { 
                $value = $prefix . $value . $space . $currency . $suffix; 
            } 
            if ($width > 0) { 
                $value = str_pad($value, $width, $flags['fillchar'], $flags['isleft'] ? 
                         STR_PAD_RIGHT : STR_PAD_LEFT); 
            } 

            $format = str_replace($fmatch[0], $value, $format); 
        } 
        return $format; 
    } 

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Legal, mas como o Script ja está pronto a empresa que desenvolveu recomendou a mundança do código que postei, conforme relatei preciso apenas inserir um ponto para ter o resultado que mencionei, eles me mandaram um breve tutorial onde citam o trecho dessa forma:

Agora, clique no modo de código Dreamweaver e, em seguida, procurar como “getSymbol()” então você pode encontrar
este código ::- <?php echo $this->_currency->getSymbol().$this->_view->escape($entry['property_price']); ?>


E agora adicionar number_format( antes $this-> adicionar ) antes php function ending code ; ?>

Este é o código de modificação ::

<?php echo $this->_currency-> getSymbol().number_format($this->_view->escape($entry['property_price'])); ?>


Eu não preciso incluir centavos no preço porque não se usa no Script e não é necessário.

O arquivo que estou editando no momento é esse:

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

<?php echo $this->_currency-> getSymbol().number_format($this->_view->escape($entry['property_price']),'0',',','.'); ?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

<div class="block">
<?php
class residential_property
{
protected $_group = 1;
protected $_limit = 3;
protected $_category_id = 4;
protected $_DBconn;
protected $_front_template;
protected $_view;
protected $_currency;
protected $_group_db;
protected $translator;

public function __construct($view)
{
$this->_front_template = Zend_Registry::get('front_template');
$this->_view = $view;

//DB Connection
$this->_DBconn = Zend_Registry::get('msqli_connection');
$this->_DBconn->getConnection();

$this->translator = Zend_Registry::get('translator');

//DD Class
$global_conf = Zend_Registry::get('global_conf');
$this->_currency = new Zend_Currency($global_conf['default_locale']);
$this->_group_db = new Property_Model_DbTable_PropertyGroup();
}

public function truncate($phrase,$start_words, $max_words)
{
$phrase_array = explode(' ',$phrase);
if(count($phrase_array) > $max_words && $max_words > 0)
$phrase = implode(' ',array_slice($phrase_array, $start_words, $max_words)).'...';
return $phrase;
}

public function class_body()
{
$groupInfo = $this->_group_db->getGroupName($this->_group);
$select = $this->_DBconn->select()
->from(array('pp' => Zend_Registry::get('dbPrefix').'property_page'), array('*'))
->where('pp.active = ?', '1')
->where('pp.group_id = ?', $this->_group)
->where('pp.category_id = ?', $this->_category_id)
->order("pp.".$groupInfo['latest_file_sort']." ".$groupInfo['latest_file_order'])
->joinLeft(array('pc' => Zend_Registry::get('dbPrefix').'property_category'), 'pp.category_id = pc.id', array('category_name' => 'pc.category_name', 'category_title' => 'pc.category_title'))
->joinLeft(array('ct' => Zend_Registry::get('dbPrefix').'cities'), 'pp.area_id = ct.city_id', array('city' => 'ct.city'))
->joinLeft(array('st' => Zend_Registry::get('dbPrefix').'states'), 'pp.state_id = st.state_id', array('state_name' => 'st.state_name'))
->limit($this->_limit);
$property_info = $select->query()->fetchAll();
$maximum_stars_digit = $this->translator->translator('maximum_stars_digit', '', 'Property');

if($property_info)
{
foreach($property_info as $entry)
{
$property_image_val_arr = explode(',',$entry['property_image']);
$property_image_no = (!empty($property_image_val_arr[0])) ? count($property_image_val_arr) : '0';
if($this->_view->escape($entry['property_primary_image']))
{
$thumb_image = 'data/frontImages/property/property_image/'.$this->_view->escape($entry['property_primary_image']);
}
else
{
if($this->_view->escape($entry['property_image']))
{
$thumb_image = 'data/frontImages/property/property_image/'.$this->_view->escape($property_image_val_arr[0]);
}
else
{
$thumb_image = 'application/layouts/scripts/'.$this->_front_template['theme_folder'].'/images/mod_property_img/no_image.png';
}
}
?>
<div class="img-wrapper">
<a href="<?php echo $this->_view->url(array('module' => 'Property','controller' =>'frontend', 'action' => 'details','property_title' => $this->_view->escape($entry['property_title']) ),'Property-details/:property_title',true); ?>" link="<?php echo $thumb_image; ?>" title="<?php echo $this->_view->escape($entry['property_name']); ?>" width="250" class="preview"><img src="<?php echo $thumb_image; ?>" height="115" border="0" class="thumb"/></a>
<div class="photo-count-container">
<div class="photo-count"><a href="<?php echo $this->_view->url(array('module' => 'Property','controller' =>'frontend', 'action' => 'details','property_title' => $this->_view->escape($entry['property_title']), 'tab' => '1' ),'Property-details/:property_title/:tab',true); ?>"><?php echo $this->translator->translator('property_front_page_property_photo_no', $property_image_no, 'Property'); ?></a></div>
</div>
</div>


<div class="details">
<h2><a href="<?php echo $this->_view->url(array('module' => 'Property','controller' =>'frontend', 'action' => 'details','property_title' => $this->_view->escape($entry['property_title']) ),'Property-details/:property_title',true); ?>" title="<?php echo $this->_view->escape($entry['property_name']); ?>" link="" class="preview"><?php echo $this->truncate($this->_view->escape($entry['property_name']), 0, 6); ?></a></h2>
<?php
for($i = 1; $i < $maximum_stars_digit; $i++)
{
$property_stars = ($i <= $this->_view->escape($entry['stars'])) ? "<img src='application/layouts/scripts/".$this->_front_template['theme_folder']."/images/mod_property_img/star-small-active.png' border='0' />" : "<img src='application/layouts/scripts/".$this->_front_template['theme_folder']."/images/mod_property_img/star-small-inactive.png' border='0' />";
echo $property_stars.' ';
}
?>
<span class="info">  | <?php echo $this->translator->translator('property_front_page_property_location', '', 'Property'); ?> <a href="<?php echo $this->_view->url(array('module' => 'Property','controller' =>'frontend', 'action' => 'details','property_title' => $this->_view->escape($entry['property_title']) ),'Property-details/:property_title',true); ?>"><?php echo $this->_view->escape($entry['city'].' / '.$entry['state_name']); ?></a>  |  <?php echo (int)$this->_view->escape($entry['feature_room_no']).' '.$this->translator->translator('partial_featured_property_room'); ?> <?php echo (int)$this->_view->escape($entry['feature_bathroom']).' '.$this->translator->translator('partial_featured_property_bathroom'); ?></span><br />
<div class="price price-big"><?php echo $this->_currency->getSymbol().$this->_view->escape($entry['property_price']); ?></div>
<?php echo $this->truncate($this->_view->escape(strip_tags($entry['property_desc'])), 0, 20); ?>
<div class="link-btn"><a href="<?php echo $this->_view->url(array('module' => 'Property','controller' =>'frontend', 'action' => 'details','property_title' => $this->_view->escape($entry['property_title']) ),'Property-details/:property_title',true); ?>"><?php echo $this->translator->translator('block_details_link','','', $this->_front_template['theme_folder']); ?></a></div>
</div>
<div class="seperator"></div>
<?php
}
?>
<div class="more"><a href="<?php echo $this->_view->url(array('module' => 'Property','controller' =>'frontend', 'action' => 'category','category_id' => $this->_view->escape($entry['category_id']) ),'Category-List/:category_id',true); ?>"><?php echo $this->translator->translator('block_tab_more',$this->_view->escape($entry['category_name']),'', $this->_front_template['theme_folder']); ?></a></div>
<?php
}
}
}

try
{
$residential_property_class = new residential_property($this);
$residential_property_class->class_body();
}
catch(Exception $e)
{
echo $e->getMessage();
}
?>
</div>

 

 


 

 

Meu amigo ESerra eu coloquei o seu código:<?php echo $this->_currency-> getSymbol().number_format($this->_view->escape($entry['property_price']),'0',',','.'); ?>

 

O mesmo não está dando erros na hora de salvar, mas os valores inseridos por exemplo:

 

R$ 200.000 está retornando R$ 200 Não deu certo!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use o str_replace para remover aquele ponto antes de usar o number_format e estude os tipos numéricos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use o str_replace para remover aquele ponto antes de usar o number_format e estude os tipos numéricos.

 

ESerra, eu não sou especialista em PHP, kkkk os desenvolvedores me enviaram outro tutorial intitulado:

 

Para alterar o preço do display 3 dígitos depois do ponto decimal.

 

 

No tutorial está assim:

 

 

Step-1

Now click on dreamweaver code mode and then search as a “
getSymbol()
”then you can find

this code::-
<?php echo $this->_currency->getSymbol().$this->_view->escape($entry['property_price']); ?>

 

Step-2

And now add
''.round(
before $this-> and add
,3)
before php function ending code ; ?>

 

Step-3

This is the modify code::

<?php echo $this->_currency->getSymbol().''.round($this->_view->escape($entry['property_price']),3); ?>

 

O passo 1 é o código original conforme postei e o passo 3 é como fica, colocando assim não funciona derepente adicionando algum parâmetro pode dar resultado

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

ESerra, eu não sou especialista em PHP, kkkk os desenvolvedores me enviaram outro tutorial intitulado:

 

Para alterar o preço do display 3 dígitos depois do ponto decimal.

 

 

No tutorial está assim:

 

 

 

 

Eu acho mesmo que a solução é através number format, ESerra tem um outro arquivo associado e preço que tem que ser alterado também que no tutorial está assim:

 

 

<?php echo $this->translator->translator('partial_featured_property_price').' '.$this->_view->escape($entry['property_price']).' '.$this->_currency->getSymbol(); ?>

 

 

E na alteração fica assim:

 

 

<?php echo $this->translator->translator('partial_featured_property_price').' '.number_format($this->_view->escape($entry['property_price'])).' '.$this->_currency->getSymbol(); ?>

 

 

 

Será que se alterar esse segundo código junto com o primeiro que você alterou funciona?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Que você não era especialista eu tinha certeza, imagino que isso caiu no seu colo e ai como é normal na área de TI "vamosnoforumversealguemfazomeutrabalho"...

 

De qualquer sorte, você tem que entender o seguinte, o number_format espera um número em que os centavos estão separados por ponto, eu estou mandando tirar os centavos, logo 200.000 -> 200 (pois os .000 são considerados centavos no number_format).

 

Na realidade eu não estou entendendo o que você precisa nisto tudo, pois no post inicial você disse que os números apareciam como 200000 e precisava que fosse 200.000

Compartilhar este post


Link para o post
Compartilhar em outros sites

Que você não era especialista eu tinha certeza, imagino que isso caiu no seu colo e ai como é normal na área de TI "vamosnoforumversealguemfazomeutrabalho"...

 

De qualquer sorte, você tem que entender o seguinte, o number_format espera um número em que os centavos estão separados por ponto, eu estou mandando tirar os centavos, logo 200.000 -> 200 (pois os .000 são considerados centavos no number_format).

 

Na realidade eu não estou entendendo o que você precisa nisto tudo, pois no post inicial você disse que os números apareciam como 200000 e precisava que fosse 200.000

 

 

Sim é isso mesmo que preciso apenas, se o number_ format tira os centavos conforme você está falando então tenho que usar outra alternativa? Com o number_format não vou conseguir o resultado que preciso?

 

 

R$ 1.000

R$ 10.000

R$ 100.000

R$ 1.000.000

 

Quando entro no painel de controle do site se insiro 300.000 vai salvar e o preço aparece: 300, para aparecer como 300.000, não posso colocar o ponto, assim aparece R$ 300000.

Compartilhar este post


Link para o post
Compartilhar em outros sites

leia a documentação: http://php.net/manual/pt_BR/function.number-format.php

 

Os parâmetros esperados para number_format são

 

number_format ( $valor, $casas_decimais , $separador_decimal , $separador_milhar );

Então se você colocar $casas_decimais = 2; $separador_decimal = "," e $separador_milhar = ".", você terá o que deseja...

Compartilhar este post


Link para o post
Compartilhar em outros sites

leia a documentação: http://php.net/manual/pt_BR/function.number-format.php

 

Os parâmetros esperados para number_format são

 

number_format ( $valor, $casas_decimais , $separador_decimal , $separador_milhar );

Então se você colocar $casas_decimais = 2; $separador_decimal = "," e $separador_milhar = ".", você terá o que deseja...

 

 

Legal Mangakah,

 

 

Na documentação tem um exemplo postado:

 

Exemplo: Example:

 

<?php

$number = 1234567.896;

echo '1: '.number_format($number, 2, ',', '').'<br>';

echo '2: '.number_format($number, 2, '.', '').'<br>';

echo '3: '.number_format($number, 2, ',', '.').'<br>';

echo '4: '.number_format($number, 2, '.', ',').'<br>';

echo '5: '.number_format($number, 2, ',', ' ').'<br>';

echo '6: '.number_format($number, 2, ',', "'").'<br>';

echo '7: '.number_format($number, 2, '', '').'<br>';

?>

 

Resultado: Result:

 

1: 1234567,90 -> Decimal separado por ,

2: 1234567.90 -> Decimal separado por .

3: 1.234.567,90 -> Moeda Brasil, Alemanha

4: 1,234,567.90 -> Inglês, USA

5: 1 234 567,90 -> França

6: 1'234'567,90 -> Suíça

7: 123456790 -> Sem decimal

 

 

Estou pensando em conseguir obter o resultado citado no exemplo linha 3: 1.234.567,90 -> Moeda Brasil, Alemanha

 

 

São dois códigos que tenho que alterar, conforme ja citei:

 

Código 1 (Original): <?php echo $this->_currency->getSymbol().$this->_view->escape($entry['property_price']); ?>

 

Opção enviada pelo desenvolvedor: <?php echo $this->_currency-> getSymbol().number_format($this->_view->escape($entry['property_price'])); ?>

 

 

Código 2 (Original): <?php echo $this->translator->translator('partial_featured_property_price').' '.$this->_view->escape($entry['property_price']).' '.$this->_currency->getSymbol(); ?>

 

 

Opção enviada pelo desenvolvedor:

<?php echo $this->translator->translator('partial_featured_property_price').' '.number_format($this->_view->escape($entry['property_price'])).' '.$this->_currency->getSymbol(); ?>

 

 

 

 

Qual parâmetro devo inseri para ter esse formato? 1.234.567,90

 

echo '3: '.number_format($number, 2, ',', '.').'<br>' ?

 

Como fica no código?

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

<?php echo $this->_currency-> getSymbol().number_format($this->_view->escape($entry['property_price']), 2, ",", "."); ?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

<?php echo $this->_currency-> getSymbol().number_format($this->_view->escape($entry['property_price']), 2, ",", "."); ?>

Bom dia Manga,

 

 

 

Cara quase deu certo, eu inseri esse código que você enviou entrei na administração do site e peguei esse valor:

 

 

226500 e digitei: 226.500 o resultado foi: 226.5 a questão é: Será que com o number format não da para salvar os zeros depois dos pontos? Eu fiz outro teste, inseri o valor: 226.545 e retorna no display de preços o valor: 226.55 o sistema subtraiu o número 4.

 

Me parece que essa função executa cálculos também, não como se estivesse salvando um texto por exemplo, não tem alguma saída simples tipo onde eu digite um valor qualquer inserindo pontos e números diversos e o sistema salve como texto?

Compartilhar este post


Link para o post
Compartilhar em outros sites

No valor, o ponto é separador de centavos, ok? Se você quer que fique 226.500 (duzentos e vinte e seis mil e quinhentos), então coloque apenas 226500 (sem pontos). Se quer 20.000,50 (vinte mil e cinquenta centavos), coloque 20000.50, sacou?

Compartilhar este post


Link para o post
Compartilhar em outros sites

No valor, o ponto é separador de centavos, ok? Se você quer que fique 226.500 (duzentos e vinte e seis mil e quinhentos), então coloque apenas 226500 (sem pontos). Se quer 20.000,50 (vinte mil e cinquenta centavos), coloque 20000.50, sacou?

 

 

Entendi então o ponto sempre separa os centavos, mas a questão que coloquei é que preciso que os valores no Script (Imóveis) apareçam conforme o digitado pelo cliente. Os centavos não precisam aparecer. Eu entrei em site de anúncios de imóveis, no campo de valores você tem que digitar o valor total e os centavos aparecem. Se você digitar 226.740,00 no anúncio vai aparecer 226.740 Se eu digitar o valor inteiro no Script que estou trabalhando sem mexer no código eu obtenho o valor inteiro, por exemplo: Se digito o valor 226740, não tem problema o valor é exibido. O que estamos querendo é o resultado que mencionei se digitar 226.740 esse valor com o ponto separando os milhares é exibido. Digitou 226.740 aparece no display de preço 226.740, Se colocar o ponto fica assim: 226.740 e no final é exibido 226.74. Se digitar 226.500 o resultado no display é 226.5 Colocando esse código modificado ou o antigo o resultado é o mesmo. Recebi agora um outro código do Desenvolvedor, testei mas o resultado é o mesmo. Esse é o titulo do tutorial com o código:

 

Para alterar o preço do display 3 dígitos depois do ponto decimal

 

Código original:

 

Passo-1
Agora, clique no modo de código Dreamweaver e, em seguida, procurar como um "getSymbol ()", então você pode encontrar
Esse código ::- <?php echo $this->_currency->getSymbol().$this->_view->escape($entry['property_price']);?>
Passo-2
E agora adicionar".round(antes $this->e adicionar,3)antes de terminar a função php código;?>
Passo-3
Este é o código de modificação:
<?php echo $this->_currency->getSymbol().".round ($this->_view->escape($entry['property_price']),3);?>
E testei esse último código sugerido e também acontece a mesma situação!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.