Tipos de dados [RESOLVIDO]

1. Tipos de dados [RESOLVIDO]

Fayos
faosfbi

(usa Ubuntu)

Enviado em 13/01/2012 - 15:03h

Galera, estou com uma dúvida de iniciante.

Tenho esta função:

post.text( "money" ).set( str( "%lld,%02d", math.getMoney().whole(), math.getMoney().cents() ) );

Reparem no %lld,%02d.

No sistema que já esta pronto, mostra o seguinte valor:

999.99

Gostaria que ficasse:

999.990

O que eu teria de mudar naquele código?

Na verdade, gostaria de entender melhor.

O que seria o %ldd = long lond integer?
e %02d = 2 numeros inteiros? Porem o que seria o '0' antes do '2'?

Valew Galera!


  


2. MELHOR RESPOSTA

Enzo de Brito Ferber
EnzoFerber

(usa FreeBSD)

Enviado em 17/01/2012 - 22:56h

Opa,


#include <stdio.h>
#include <string.h>
#include <unistd.h>

char *buildnum ( int number, int n, char pad )
{
char *str = (char *)malloc((n+1)*sizeof(char)), *a = str;

a[n] = 0x0;

while ( (number) && (*(a++) = (number%10) + 48) ) (number /= 10) ;
while ( *a ) *(a++) = pad;

return str;
}

int main ( void )
{
printf ( "# %s\n", buildnum(99,3,'0'));
printf ( "# %s\n", buildnum(99,9,'0'));
return 0;
}


Output:

# 990
# 990000000



Com esse código, você pode construir seus números tranquilamente.

Você chama a função assim:


char *numero = buildnum ( NUMERO, NUMERO_DE_CASAS, CARACTERE_USADO_NO_FINAL);


É isso ai que você queria?


Não tem como usar o printf() para fazer isso. O compilador não altera valor de número, e um padding de zeros que não altera um número é só do lado esquerdo.

Ou seja:

99 = 099 = 00000000000000000000000000000000000[n*0]99
99 != 990

Sacou?


Espero ter ajudado,
Enzo Ferber
[]'s

P.S.: http://codepad.org/hiWbQdE5

3. Re: Tipos de dados [RESOLVIDO]

???
gokernel

(usa Linux Mint)

Enviado em 14/01/2012 - 14:46h

"Reparem no %lld,%02d."

Tente isso: %lld,%03d.


4. Re: Tipos de dados [RESOLVIDO]

Fayos
faosfbi

(usa Ubuntu)

Enviado em 14/01/2012 - 21:14h

Então velho,

Já fiz isso, porem o resultado foi inesperado.

o valor visualizado originalmente é o seguinte 999.99

Apos a mudança 999.099

Ou seja, apos eu mudar o %02d para %03d, foi acrescentado um zero a esquerda e nao a direita como gostaria que ficasse.

:-s


5. Re: Tipos de dados [RESOLVIDO]

???
gokernel

(usa Linux Mint)

Enviado em 14/01/2012 - 21:55h

Simples e correto.

Vc é que quer forçar um valor errado.

O correto é: .99 ou .099 E NÃO .990

Sacou ?



6. Re: Tipos de dados [RESOLVIDO]

Fayos
faosfbi

(usa Ubuntu)

Enviado em 14/01/2012 - 22:32h

Verdade, realmente seria forçar o valor.

E tem como fazer isso?

Valor 999.99

Ficar 999.990

Valew!


7. Re: Tipos de dados [RESOLVIDO]

???
gokernel

(usa Linux Mint)

Enviado em 14/01/2012 - 22:43h

Cara, não sei exatamente como fazer pois não sei de maiores detalhes, mas ...

Veja algo assim:
É só incrementar 0.099 + 0.891 = 990.


8. Re: Tipos de dados [RESOLVIDO]

???
gokernel

(usa Linux Mint)

Enviado em 14/01/2012 - 22:53h

ou 99 * 10 = 990


9. Re: Tipos de dados [RESOLVIDO]

Fayos
faosfbi

(usa Ubuntu)

Enviado em 16/01/2012 - 12:08h

Então, o valor 999.99 é apenas um valor qualquer, na verdade é um valor inteiro qualquer dentro de uma variavel.

Mas, uma boa ideia de multiplicar este valor por 10, assim terei o zero a direita.

Vou tentar, valew Amigo!


10. Re: Tipos de dados [RESOLVIDO]

José Mário
miura 787

(usa Ubuntu)

Enviado em 16/01/2012 - 12:39h

Tenho quase certeza que multiplicar por 10 não vai solucionar o problema porque o próprio sistema vai suprimir o "zero à esquerda". Também não sei como fazer, mas provavelmente será uma configuração na forma de exibir o número, já que .99 e .990 são a mesma coisa.

Deve haver alguma maneira de fazer isso na hora de exibir como o tal 03d indicado!


11. Re: Tipos de dados [RESOLVIDO]

Enzo de Brito Ferber
EnzoFerber

(usa FreeBSD)

Enviado em 20/01/2012 - 10:13h

E ai?

Algum progresso?


12. Re: Tipos de dados [RESOLVIDO]

Fayos
faosfbi

(usa Ubuntu)

Enviado em 26/01/2012 - 19:20h

Olá Pessoal!

Primeiramente venho agradecer a todos pelos excelentes comentários e ajuda prática que me deram para resolver o problema.

Porem, consegui resolver da seguinte forma:

Na parte onde se retorna o valor da função, onde estava "%lld,%02d", mudei para "%lld,%03d".

E na função math.getMoney().whole() que retornava o valor eu mudei de

return v % 100 ;

para

return (v * 10) % 1000;

É isso ai galera!

VALEW A TODOS!!!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts