Jump to content
N3lson

Sprintf com espaços

Recommended Posts

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.

Share this post


Link to post
Share on other 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  ?

Share this post


Link to post
Share on other 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>';
						}
					?>

Edited by 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.

Share this post


Link to post
Share on other 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)

Edited by HappyHippyHippo

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

Share this post


Link to post
Share on other 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

https://postimg.cc/image/qk6ln72ab/


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

Share this post


Link to post
Share on other 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 !!!

Edited by HappyHippyHippo

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

Share this post


Link to post
Share on other 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

Edited by 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.

Share this post


Link to post
Share on other 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));

Edited by 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.

Share this post


Link to post
Share on other sites
HappyHippyHippo
$montante = str_pad(number_format($montante, 2), 5, ' ', STR_PAD_LEFT);


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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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|

  • Vote 1

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.