Jump to content

Recommended Posts

Posted

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.

Posted (edited)

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.

Posted

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.

Posted (edited)

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
Posted (edited)

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.

Posted (edited)

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.

Posted

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.

Posted

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

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.