Ir para conteúdo

POWERED BY:

Arquivado

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

George Farias Sena

como calcular percentual de cada linha?

Recommended Posts

Olá galera do Fórum,

 

Gostaria de saber se alguém sabe como calcular o Percentual (%) que cada linha representa com relação ao valor total!

 

Ex:

nome____dinheiro_____percentual?

joão_______5___________17%

lucas_______8__________28%

larissa_____16__________55%

 

TOTAL_____29

 

O cálculo acima foi feito no excel, o que ele faz: pega o valor(dinheiro) individual de cada nome e divide pela soma deles, ou seja, 5/29=17%, 8/29=28% e 16/29=55% o que me gera um total de 100%.

 

no php não estou conseguindo fazer este cálculo porém segue parte do código utilizado:

 

Eu acho que este código calcula apenas a última linha! pois é a única que dá certo

 

<table width="440" border="0" align="center" class="style2" bordercolor="#D4D0C8">

<tr>

<td width="204"><div align="left"><?php echo $nome; ?></div> </td>

<td width="46"><div align="center"><?php echo $dinheiro; ?></div></td>

<td width="53"><div align="center"><?php echo ((($dinheiro)/($total_dinheiro))*100); ?></div></td>

Alguém se habilita a me auxiliar?

Abraços a todos os amigos do Forum,

George Sena

Compartilhar este post


Link para o post
Compartilhar em outros sites

fala amigo,

 

ja fiz isso, porém o percentual é calculado correto apenas para o último numero gerado

 

Exemplo que está acontecendo (totaliza mais de 100%):

nome____dinheiro_____percentual?

joão_______5___________66% (errado)

lucas_______8__________49% (errado)

larissa_____16__________55% (certo)

 

TOTAL_____29

 

Exemplo que deveria acontecer (totaliza 100%):

nome____dinheiro_____percentual?

joão_______5___________17% (certo)

lucas_______8__________28% (certo)

larissa_____16__________55% (certo)

 

TOTAL_____29

 

ressalto que estou trabalhando com informações dinâmicas, ou seja, podem entrar e sair nomes, e gostaria que esse percentual ficasse tambem automatico, ou seja, se sair um nome automaticamente os percentuais seriam redistribuidos para os nomes que ficaram.

 

 

 

Grande Abraço,

George Sena

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, eu não sei de onde está saindo estes valores, então vou colocar dentro de um array só pra ter uma idéia:

$valores = array(10,8,5,6,9,11);$total = array_sum($valores);foreach($valores as $chave => $valor) {$arrayPercentual[$chave] = $valor*100/$total;}

Daí $arrayPercentual vai conter os valores percentuais, tendo a mesma chave que o $valores. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esses valores e nomes são cadastrados por usuarios, de modo que quando eu for realizar um novo cadastro e mandar para o MySql os novos campor serão redefinidos pois o TOTAL irá aumentar, a quantidade de nomes tambem aumentará e consequentemente o percentual de cada nome mudará, irá ficar assim:

 

nome____dinheiro_____percentual?

joão_______5___________13% (certo)

lucas_______8__________20% (certo)

larissa_____16__________40% (certo)

george_____11__________28% (certo)

TOTAL_____40

 

Acho que isso é mais complicado que imaginava.... Será que isso é possivel?[/

 

Segue abaixo o código:

<?php

require "comum.php";

require "verifica.php";

?>

<?php

if($_SESSION["estado] == "PA")

{

$sql = "SELECT *, SUM(`dinheiro`) AS `dinheiro` FROM `relatorio_visitas` WHERE uf = 'PA' or uf = 'AP' Group BY `dealer` asc";

$resultado = mysql_query($sql) or die ("Não foi possível realizar a consulta ao banco de dados");

}

?>

<p align="center" class="style1">INFORMAÇÃO DE NEGOCIAÇÃO</p>

<p><a href="index.php">Principal</a></p>

<table width="448" border="1" align="center" bordercolor="#FFFFFF" bgcolor="#CCCCCC" class="style3">

<tr>

<td width="202"><div align="center">Nome</div></td>

<td width="45"><div align="center">Dinheiro</div></td>

<td width="53"><div align="center">%</div></td>

</tr>

</table>

 

<?php

while ($linha=mysql_fetch_array($resultado)) {

$valor_dinheiro = $linha["dinheiro"];

$total_dinheiro= ($total_dinheiro+ $valor_dinheiro);

 

$nome= $linha["nome"];

$dinheiro= $linha["dinheiro"];

?>

 

<table width="440" border="0" align="center" class="style2" bordercolor="#D4D0C8">

<tr>

<td width="204"><div align="left"><?php echo $nome; ?></div> </td>

<td width="46"><div align="center"><?php echo $dinheiro; ?></div></td>

<td width="53"><div align="center"><?php echo $dinheiro/$total_dinheiro; ?></div></td>

</tr>

</table>

<?php

}

?>

<table width="440" border="0" align="center" bordercolor="#D4D0C8" class="style4">

<tr>

<td width="204"><div align="left">TOTAL</div> </td>

<td width="46"><div align="center"><span class="style4">

<?php

$total_dinheiro = number_format($total_dinheiro, 0, ',', '.');

echo $total_dinheiro;

?>

</span></div></td>

<td width="53"><div align="center"></div></td>

</tr>

</table>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala amigo beleza?

 

tentei esta situação e notei o seguinte:

 

ATUAL

nome____dinheiro_____percentual?

joão_______5___________100% (errado)

lucas_______8__________62% (errado)

larissa_____16__________55% (errado)

george_____11__________28% (certo)

TOTAL_____40

 

DEVERIA FICAR

nome____dinheiro_____percentual?

joão_______5___________13% (certo)

lucas_______8__________20% (certo)

larissa_____16__________40% (certo)

george_____11__________28% (certo)

TOTAL_____40

 

Quando o calculo é realizado em cada linha, a primeira linha sempre dá 100%, o percentual da 2ª linha é calculado em cima da soma da 1ª e da 2ª linha, o percentual da 3ª linha é calculado em cima da soma das linhas 1ª,2ª e 3ª, e assim sucessivamente...

O que deveria acontecer para o calculo correto era essa divisão ser em cima do valor total o que não está acontecendo.

 

Obs: note que apenas a última linha dá o percentual correto, pois como explicado acima ele pega sempre a soma das linhas antes da linha utilizada.

 

O erro está aqui:

 

$sql = "SELECT *, SUM(`dinheiro`) AS `total` FROM `relatorio_visitas` WHERE uf = 'PA' or uf = 'AP' Group BY `dealer` asc";//continua seu códigowhile ($linha=mysql_fetch_array($resultado)) {$valor_dinheiro = $linha["dinheiro"];$total_dinheiro= $linha["total"];//continua seu código

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fale prezados,

 

tentei no entanto infelizmente não consegui... tentei colocar um código mais simples para ver se facilitava na resolução, porém não funcionou. o resultado do percentual dá sempre 100 http://forum.imasters.com.br/public/style_emoticons/default/cry.gif ... Vou postar meu código real para ver se agora conseguimos, pois tá pegando http://forum.imasters.com.br/public/style_emoticons/default/devil.gif rsrsrs

 

Perdi as esperanças mas quem sabe tenho novamente ajuda!

 

 

 

no exemplo anterior considere altas = dinheiro e dealer = nome

 

<?php

require "comum.php";

 

$sql = "SELECT *, SUM(`altas`) AS `altas` FROM `relatorio_visitas` Group BY `dealer` asc";

 

$resultado = mysql_query($sql) or die ("Não foi possível realizar a consulta ao banco de dados");

?>

 

<?php

$total = 0;

 

 

//Função para limitar txt

function chopSent($varb, $num) {

$dNum = intval($num);

if (strlen($varb) >= $dNum) {

$nVarb = substr($varb, 0, $dNum);

$nVarb .= '...';

}

elseif(strlen($varb) < $dNum) {

$nVarb = $varb;

}

return $nVarb;

}

// Fim da função

?>

<style type="text/css">

<!--

.style1 {

color: #666666;

font-style: normal;

font-weight: bold;

font-size: 24px;

}

.style2 {

color: #666666;

font-style: normal;

font-weight: normal;

font-size: 10px;

font:Verdana;

}

.style3 {

color: #333333;

font-style: inherit;

font-weight: normal;

font-size: 14px;

font:Verdana;

font:bold

}

.style4 {

color:#990000;

font-style: inherit;

font-weight: normal;

font-size: 12px;

font:Verdana;

font:bold

}

 

 

-->

</style>

 

<p align="center" class="style1">INFORMAÇÃO DE NEGOCIAÇÃO</p>

<p><a href="index.php">Principal</a></p>

<table width="389" border="1" align="center" bordercolor="#FFFFFF" bgcolor="#CCCCCC" class="style3">

<tr>

<td width="202"><div align="center">Dealer</div></td>

<td width="45"><div align="center">Altas</div></td>

</tr>

</table>

 

<?php

while ($linha=mysql_fetch_array($resultado)) {

$valor_altas = $linha["altas"];

$total_altas = ($total_altas + $valor_altas);

 

 

// terminei de chamar o campo empresa

$codigo = $linha["codigo"];

$dealer = $linha["dealer"];

$altas = $linha["altas"];

$uf = $linha["uf"];

?>

 

<table width="383" border="0" align="center" class="style2" bordercolor="#D4D0C8">

<tr>

<td width="204"><div align="left"><?php echo $dealer; ?></div> </td>

<td width="46"><div align="center"><?php echo $altas; ?></div></td>

</tr>

</table>

<?php

}

?>

<table width="383" border="0" align="center" bordercolor="#D4D0C8" class="style4">

<tr>

<td width="204"><div align="left">TOTAL</div>

</td>

<td width="46"><div align="center"><span class="style4">

<?php

$total_altas = number_format($total_altas, 0, ',', '.');

echo $total_altas;

?>

</span></div></td>

<td width="62"><div align="center"><span class="style4">

<?php

$total_trocas = number_format($total_trocas, 0, ',', '.');

echo $total_trocas;

?>

</span></div></td>

<td width="53"><div align="center"><span class="style4">

<?php

$total_dados = number_format($total_dados, 0, ',', '.');

echo $total_dados;

?>

</span></div></td>

</tr>

</table>

 

Caso não tenha dado para entender algo me digam!

 

 

Grande abraço à todos,

George Sena

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu amigo... vou testar

 

Grande Abraço

George Sena

 

George,

 

fiz um exemplo aqui desconsiderando o seu código. Esse que fiz dá certo com certeza. Adapte ao seu uso.

 

CREATE TABLE `teste` (
`nome` VARCHAR( 20 ) NOT NULL ,
`dinheiro` FLOAT NOT NULL ,
PRIMARY KEY ( `nome` ) 
) TYPE = MYISAM ;

INSERT INTO `teste` ( `nome` , `dinheiro` ) 
VALUES (
'tmferreira', '40'
), (
'George', '10'
), (
'agora vai', '30'
), (
'com certeza', '15'
);

 

 

<?php$con = mysql_connect("localhost", "usuario", "senha");$bd = mysql_select_db("nome_do_seu_bd", $con);$sql = "SELECT nome, dinheiro, (select sum(dinheiro) from teste) as total FROM teste";$query = mysql_query($sql);mysql_close($con);while ($linha=mysql_fetch_array($query)) {$dinheiro = $linha["dinheiro"];$total_dinheiro= $dinheiro*100/$linha["total"];$nome= $linha["nome"];?><table width="440" border="0" align="center" class="style2" bordercolor="#D4D0C8"><tr> <td width="204"><div align="left"><?php echo $nome; ?></div> </td><td width="46"><div align="center"><?php echo $dinheiro; ?></div></td><td width="53"><div align="center"><?php echo $total_dinheiro; ?></div></td></tr></table><?php }?>

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.