Ir para o conteúdo
N3lson

Sprintf com espaços

Mensagens Recomendadas

N3lson

Boas estou a tentar fazer o alinhamento com espaços através da função sprintf mas não está a dar

$montante = sprintf("%6s.1f",$montante); // apresenta o 1f nao faz o padding


$montante = sprintf("%6s",$montante); // nao faz o padding com espaços


You can't do it, kid. But don't worry, my boy. You're not the only one. No one else can do it.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Rui Carlos

O que é que pretendes fazer exactamente?

Testei agora este exemplo

<?php
$montante = 123;
$montante = sprintf("%6s",$montante);
echo $montante;

e imprimiu

   123

Não te está a faltar converter os espaços para  ?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
N3lson

A mim não

eu tenho isto...

<?
<a href="#" title=""><img src="images/user.png" alt="" class="floatL" /></a>
						<?php
						movimento('receita');
						while($b = mysqli_fetch_array($mov, MYSQL_ASSOC)){
							extract($b);
						print'<ul class="leftList">  
							<li><tt>Responsável:</tt> <a href="#" title=""><strong>'.$resp.'</strong></a></li>
						   <li><tt>Motivo:</tt> <strong class="orange">'.ucfirst($motivo).'</strong></li>
							<li class="orderIcons"><strong><tt>'.ucfirst(strtolower($info)).'</tt></strong></li>
						</ul>
						<ul class="rightList"> <a href="#" title="">
							<li><a href="#" title=""> <strong class="blueBack"># '.$id.'</strong></a></li>
						</ul>
						<div class="clear"></div>
					</div>

					<div class="cLine"></div>

					<div class="orderRow">
						<ul class="leftList">
							<li><tt>Data:</tt></li>
							<li><tt>Montante:</tt></li>
						</ul>
						<ul class="rightList">
							<li><strong class="green">'.data($data).'</strong></li>
							<li><strong class="orange">'.sprintf('%06s',$montante).' €</strong></li>
						</ul>
						<div class="clear"></div>
					</div>

					<div class="cLine"></div>
					<div class="totalAmount"><h6 class="floatL blue">Total:</h6><h6 class="floatR blue">'.sprintf('%.1f',soma_mensal('montante','receita',$ano, $mes)).' €<img src="./images/icons/total.png" class="icon"></h6><div class="clear"></div></div>';
						}
					?>

Editado por N3lson

You can't do it, kid. But don't worry, my boy. You're not the only one. No one else can do it.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

do link que te apresentei :

//sprintf('%06s',$montante)
str_pad($montante, 6, '0', STR_PAD_LEFT)

ps : qual o valor da variável $montante ? (em string)

Editado por HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
N3lson

Aqui tem um print com o str_pad

	extract($row);
							$montante = (strlen($montante <= 6)) ?  str_pad($montante, 9, '0', STR_PAD_LEFT) :  sprintf("%02.1f",$montante);
					   echo '<tr>
							<td align="center"><a class="stats"><tt>'.$montante.' €</tt></a></td>
							<td><tt>'.$motivo.'</tt></td>';
							echo($ident =='R') ?
							'<td><span class="statsmais">'.$data.'</span></td>':
							'<td><span class="statsmenos">'.$data.'</span></td>
						</tr>';

Resultado

http://postimg.org/image/qk6ln72ab/

Editado por N3lson

You can't do it, kid. But don't worry, my boy. You're not the only one. No one else can do it.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

eu vejo um erro grave e um "senão"

erro :

(strlen($montante <= 6)) ? ...

estás a calcular o tamanho da string "$montante <= 6" que resulta sempre em falso ou verdadeiro

agora, ou queres verificar se o valor da variável $montante é menor que 6 o que dá somente :

$montante <= 6 ? ...

ou queres verificar se o tamanho do texto resultante da impressão do valor da variável $montante é menor que 6, o que dá:

strlen($montante) <= 6 ? ...

o que tens resulta no primeiro caso, mas de uma forma muito estranha pela razão descrita a seguir

"senão" :

o problema agora é que falso é equivalente a nulo ou string vazia, logo o strlen desse valor é 0, que é falso, e o valor verdadeiro é convertido para o valor numérico 1, que tem o resultado de strlen de 1, que é verdadeiro.

conclusão :

como vês, o que está a ser calculado/comparado é na realidade o valor de $montante que visto no print screen de exemplo de output, nunca é menor que 6 (o menor apresentado é de 10, logo a função str_pad nunca é executada !!!

Editado por HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
N3lson

quero calcular o tamanho do texto, mas eu tenho esse controle noutro parte do script e dá

mas então o que terei de colocar, apenas < 7 ?

ps. esquece o str_pad 9 eu coloquei 9 a ver se mostrava alguma coisa

Editado por N3lson

You can't do it, kid. But don't worry, my boy. You're not the only one. No one else can do it.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
N3lson

Se tirar a condição aparece-me o padding, mas queria com espaços e 1 float

aparece-me assim com o . a fazer de padding

..120 €
...10 €

mas pretendia :

120.0 €
10.0 €

// Edit

Consegui alinhar com espaços desta forma, falta-me o float

$montante = str_replace(" ", " ", str_pad($montante, 5, ' ', STR_PAD_LEFT));

Editado por N3lson

You can't do it, kid. But don't worry, my boy. You're not the only one. No one else can do it.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
N3lson

Já testei com o number_format mas obtenho o mesmo problema, desalinha, vou ter de forçar com html

Obrigado


You can't do it, kid. But don't worry, my boy. You're not the only one. No one else can do it.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nelsonr

Acho que aqui a questão não é do exemplo dado pelo HHH não estar a funcionar.

A fonte é monospace? Pode ser que a largura do caracter do espaço seja pequena, então visualmente desalinha (apesar de estar lá o espaço).

Isto funciona

$montante = 120.42;
$montante = str_pad(number_format($montante, 2), 10, ' ', STR_PAD_LEFT);
echo("|".$montante."|");
  // Resultado:  |	120.42|

  • Voto 1

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
N3lson

Formatar interface html? Nao consegues com css?

Foi o que fiz ...


You can't do it, kid. But don't worry, my boy. You're not the only one. No one else can do it.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.