Ir para conteúdo

Arquivado

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

ggg

[Resolvido] Formatação de Decimais sem Arredondamento

Recommended Posts

A idéia é formatar um determinado valor retornando as casas decimais, se houver, sem arredondá-las (ao contrário da função "number_format()" que arredonda as casas decimais).

 

Explicando:

 

$var = 100.199; //Deve mostrar "100.19" e não "100.20"

 

//Uma forma simples seria:

$var = intval($var * 100) / 100; //No caso de "100.199" resultaria corretamente "100.19"

OU

 

$var = (int)($var * 100) / 100; //No caso de "100.199" também resultaria corretamente "100.19"

***Porém acredito que exista algum tipo bug na função "inval(var)" e na conversão "(int)var", pois ao colocarmos por exemplo o valor "1305.6" resulta "1305.59" e não "1305.6", o que seria um valor incorreto.

 

Para observar acessem:

Temporariamente Disponível

 

"Como sou iniciante, podem desconsiderar este tópico caso seja irrelevante, a intenção é ajudar!"

 

[]s

 

Desculpe minha ignorância e também pelo flood, mas gostaria de saber por que este tópico foi movido?

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Utilize a função floatval amigo.

Ou aumente as casas decimais do number_format

 

<?php 
      echo '<pre>';
      $number = 100.199;
      $numbers[] = floatval($number);
      $numbers[] = number_format($number,3,',','.');
      var_dump($numbers);
?>
Veja este exemplo e vai entender como funciona cada um.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Resolução:

 

1ª Forma - Convertendo valores para string

$valor = 100.19999999; //Para um resultado correto deve-se considerar o limite de 11 casas após a vírgula na dízima) 
$valor = intval(strval($valor * 100)) / 100; 
echo $valor; //Exibe "100.19" (String)

 

 

2ª Forma - Utilizando a extensão BC

$valor = 100.19999999; //Para um resultado correto deve-se considerar o limite de 11 casas após a vírgula na dízima) 
$valor = bcmul($valor, '100', 2); //Multiplicação - Parâmetros[valor, multiplicador, casas decimais] 
$valor = bcdiv($valor, '100', 2); //Divisão - Parâmetros[valor, divisor, casas decimais] echo $valor; //Exibe "100.19" (String)

 

 

OBS:

- Mais informações sobre variáveis float Clique aqui

 

*Aos Moderadores: Favor editar o título para "Resolvido", obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alguém poderia me ajudar numa questão por favor ? Como ão sou expert em php, estou com um problema para resolver. Preciso que meu carrinho ao atualizar não arredonde o valor da quantidade. Sempre que atualizo ele arredonda o valor. Por exemplo se coloco 2,58 ele arredonda para 2,00. Gostaria que ele pegasse o valor de 2,58 * o valor do produto.

 

<?php
if(count($_SESSION['carrinho']) == 0 ) {
echo '<tr><td colspan="5">Não há produto selecionado</td></tr>';
}else{
require("conn.php");
$total = 0;
foreach($_SESSION['carrinho'] as $id => $qtd){
$sql = "SELECT * FROM produtos WHERE id= '$id'";
$qr = mysql_query($sql) or die(mysql_error());
$ln = mysql_fetch_assoc($qr);
$pesometro =$ln['pesometro'];
$nome = $ln['nome'];
$preco = number_format($ln['preco'], 2 , ',', '.');
$pesometro = number_format($ln['pesometro'], '2' , ',', '.');
$subtotal = number_format($ln['preco'] * $qtd,2, ',', '.');
$pesosub = number_format($ln['pesometro'] * $qtd, '2' , ',', '.');
$valortotal += $ln['preco'] * $qtd;
$pesototal += $ln['pesometro'] * $qtd;
$mtotal += $ln['qtd'] + $qtd;
if ($pesototal <= 500) {
$vfrete = '60,00';
} elseif ($pesototal > 500) {
$vfrete = '70,00';
} else {
$total = $total;
}
echo '<tr>
<td><input type="text" size="3" name="descricao" value="'.$nome.' " id="descricao" readonly </td>
<td><center><input type="text" size="3" name="prod['.$id.']" value="'.$qtd = number_format($qtd,2, ',', '.'). '" " id="qtd" /></center></td>
<td><center><input type="text" size="3" value=" '.$preco.'"id="preçosub" readonly </center></td>
<td><center><input type="text" size="3" value=" '.$pesosub.'"id="pesosub" readonly </center></td>
<td><center><input type="text" size="3" value=" '.$subtotal.'" id="subtotal" readonly </center></td>
<td><a href="?acao=del&id='.$id.'" readonly ><center><img src="trash.png" width="14" height="16" alt="Deletar" /></center></a></td>
</tr>
<br>';
}
$valortotal = $valortotal + $vfrete;
$valortotal = number_format($valortotal, 2, ',', '.');
$pesototal = number_format($pesototal, 2, ',', '.');
$mtotal = number_format($mtotal, 2, ',', '.');
echo '<td>
<td>
<td>
<td></BR>Valor do Frete..........................:<td><hr>
<center><input type="text" size="3" value=" R$ '.$vfrete.'" id="subtotal" readonly </center><br></td><tr><td><td>
<br><input type="text" size="3" value=" Metragem total m² : '.$mtotal.' " " id="total" readonly </center><td><td>
<br><input type="text" size="3" value=" Peso total: '.$pesototal.'" " id="pesototal" readonly </center><td>
<br><input type="text" size="3" value=" Valor total: R$ '.$valortotal.'" " id="total" readonly </center><td></tr>
<tr>';
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Nyl Guedes, Bem-vindo ao fórum! :)
Recomendo que leia as regras e orientações de participação

 

Crie um novo tópico para sua dúvida

 

 

PS: funções mysql_* estão obsoletas desde o PHP 5.5 e já foram removidas no PHP 7. Prefira usar MySQLi ou PDO. Veja mais aqui: http://rberaldo.com.br/mysql-obsoleto-php/

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante
Este tópico está impedido de receber novos posts.

×

Informação importante

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