[OFF TOPIC] - mySQL Decimal

221 views
Skip to first unread message

MEM

unread,
Aug 20, 2009, 7:59:06 AM8/20/09
to list...@googlegroups.com
Peço desculpa pelo offtopic mas não consigo encontrar resposta e sei que a
solução deve ser bem simples:

Quero guardar no banco de dados valores entre:

0,01 e 99,999

Deverei usar a notação DECIMAL(5,3) ?

Se sim, o que vai acontecer quando introduzirmos um valor do tipo:
0,01 ? vai ficar => 00,010 ?

Se sim, deveremos usar uma função em PHP para remover os zeros à esquerda e
à direita do número?


Obrigado, e desculpem o offtopic.
Márcio

Fernando E. Borba

unread,
Aug 20, 2009, 8:37:44 AM8/20/09
to LISTA PHP
Márcio,

Você poderá inserir 0.01 e no banco vai ficar 0.010

Posso até estar errado, mas acredito que você precisará converter de
0,01 para 0.01. (Trocar vírgula por ponto)

Então você precisará remover zeros a direita apenas.

Fernando

Fernando Emmanoel Borba
Vitalecom - Cursos PHP Online
http://www.vitalecom.com.br/blog/
http://twitter.com/fernborba

Igor Escobar

unread,
Aug 20, 2009, 8:35:02 AM8/20/09
to list...@googlegroups.com
;)

http://dev.mysql.com/doc/refman/4.1/pt/numeric-types.html


Regards,
Igor Escobar
Systems Analyst & Interface Designer

+ http://blog.igorescobar.com
+ http://www.igorescobar.com
+ @igorescobar (twitter)





2009/8/20 MEM <tal...@gmail.com>

MEM

unread,
Aug 20, 2009, 9:06:18 AM8/20/09
to list...@googlegroups.com
Vamos ver se entendi direito:

Se tivermos DECIMAL(5,3) estamos a dizer: "aceita ATÉ 5 dígitos mas todos
eles OBRIGADOS a 3 casas decimais".

Assim, se tivermos: Ele devolve:
11,3 => 11,300
22,35 => 22,350
02,34 => 2,340
12,234 => 12,234

Mas se tivermos estes casos:
a) 90,50 => 90,500
b) 14,300 => 14,300

Eu precisarei de remover os zeros mais à direita no caso a) MAS não deverei
remover os zeros mais à direita no caso b).

Como deveremos proceder nestes casos? Existe alguma função do PHP que nos
possa ajudar?


Obrigado,
Márcio

Fernando Emmanoel Borba

unread,
Aug 20, 2009, 9:28:13 AM8/20/09
to list...@googlegroups.com
Assim,

Zeros a direita depois da vírgula não tem valor.

15,00000  é igual a 15,0 caso você use este valor em uma adição.

Se o que você precisa é do valor para apenas representação visual, armazena em um campo VARCHAR.
Se entrar 15,00 fica 15,00.

Para te ajudar melhor, qual é a finalidade deste campo no banco de dados?


Fernando

2009/8/20 MEM <tal...@gmail.com>



--
Fernando Emmanoel Borba
Apoio ao Usuário
CR1 - Controle de Reservas :: www.cr1.com.br
Fone: (48) 3304-9004  Cel: (48) 9925-3126
Skype: fernando.emmanoel.borba
Twitter: pesquisahotel

MEM

unread,
Aug 20, 2009, 9:29:03 AM8/20/09
to list...@googlegroups.com

:) Eu fui lá. E ele diz:

 

“Neste exemplo, 5 (precisão) representa o número de digitos decimais significantes que serão armazenados no valor, e 2 (escala) representa o número de dígitos que serão armazenados após o ponto decimal. Neste caso, no entanto, a faixa de valores que podem ser armazendos na coluna salario é de -99.99 a 99.99.”

 

Se tivermos DECIMAL(5,3)

Pelo que está dito, saberemos que ele estará entre (-99,999 e 99,999) MAS, o que ele não nos diz é, o que faz ele com os zeros no seguinte exemplo:

 

43,30. Ele deixa estar assim, ou faz: 43,300 ?

Se fizer 43,300, então, eu tenho de ter uma maneira de remover esse zero mais à direita. Contudo, às vezes, eu vou querer inserir 43.300 MESMO, aí, eu não quero que ele remova os 0 à direita.

 

Eu quero que o meu banco de dados guarde os valores:

43,300 quando esse é o valor escrito.

4,30 (quando esse é o valor escrito).

0,30 (quando esse é o valor escrito).

 

 

Estou fazendo confusão onde não há?

 

 

Abraço,

Márcio

Beatriz KMS

unread,
Aug 20, 2009, 10:27:26 AM8/20/09
to list...@googlegroups.com
Mas pq vc quer que ele retorne 43,30 ao invés de 43,300 se ambos os valores sao iguais?!?!
Retornar com X casas decimais é somente FORMATACAO... e isso deve estar na visualização dos dados, não no banco.

2009/8/20 MEM <tal...@gmail.com>

MEM

unread,
Aug 20, 2009, 10:40:36 AM8/20/09
to list...@googlegroups.com

Em primeiro lugar, eu estava confundindo o separador de dinheiro, com o separador decimal.

 

:s

 

Então, o que eu quero guardar é preços.

Os preços podem ir de:

 

0,01  Euros (i.e. 1 cêntimo)

 

Até

 

999.999.99 Euros (i.e. 999 mil, 999 Euro e 99 cêntimos).

 

Calculo que deva ter sempre 2 casas decimais e não 3 como estava pensando, assim o campo definido deverá ser:

 

DECIMAL(8,2) Pois aceitará números com duas casas decimais até: 999999,99.

 

Isto é o que deverá estar na coluna da minha tabela.

 

 

 

Agora:

O que vou querer provavelmente é uma função que na hora de mostrar os preços saiba que:

Quando estiver: “0,01” eu quero converter para “1” e adicionar a palavra “cêntimo”.

Quando tiver “0,02” eu quero converter para “2” e adicionar a palavra “cêntimos”.

Quando tiver “0,1” eu quero converter para “10” e adicionar a palavra “cêntimos”.

Quando tiver “0,9” eu quero converter para “90” e adicionar a palavra “cêntimos”-

 

Do 1 até ao 999999,99 eu quero apenas adicionar a palavra “Euro” (no caso do 1) e “Euros” nos casos > que 1.

 

O PHP tem funções que nos facilitem o trabalho com este tipo de dados?

 

 

Abraço,

Márcio

MEM

unread,
Aug 20, 2009, 11:10:16 AM8/20/09
to list...@googlegroups.com

Tem razão Beatriz, e já escrevi num outro post, detectando esse meu erro, concluindo então que agora, o que estava precisando era exactamente de, na parte de visualização ter algo que:

 

Quando estiver: “0,01” eu quero converter para “1” e adicionar a palavra “cêntimo”.

Quando tiver “0,02” eu quero converter para “2” e adicionar a palavra “cêntimos”.

Quando tiver “0,1” eu quero converter para “10” e adicionar a palavra “cêntimos”.

Quando tiver “0,9” eu quero converter para “90” e adicionar a palavra “cêntimos”-

 

Do 1 até ao 999999,99 eu quero apenas adicionar a palavra “Euro” (no caso do 1) e “Euros” nos casos > que 1.

 

 

E a minha questão passou então a ser:

O PHP tem funções que nos facilitem o trabalho com este tipo de dados?

 

 

Abraço,

Igor Escobar

unread,
Aug 20, 2009, 12:39:15 PM8/20/09
to list...@googlegroups.com
Como 43,300 pode ser igual a 43,30 ?? 300 nunca vai ser igual a 30, falando em quantidade....
se for para colocar os 2 valores na mesma quantidade de casas ficaria:

43,30 e 43,030 e não 43,300 !

Ou eu estou viajando?


Regards,
Igor Escobar
Systems Analyst & Interface Designer

+ http://blog.igorescobar.com
+ http://www.igorescobar.com
+ @igorescobar (twitter)





2009/8/20 Beatriz KMS <beatr...@gmail.com>

Igor Escobar

unread,
Aug 20, 2009, 12:44:42 PM8/20/09
to list...@googlegroups.com
Eu ainda não entendi a lógica da sua matemática, Márcio. Não entendi como 0,01 pode ser igual a 1 rs.



Regards,
Igor Escobar
Systems Analyst & Interface Designer

+ http://blog.igorescobar.com
+ http://www.igorescobar.com
+ @igorescobar (twitter)





2009/8/20 MEM <tal...@gmail.com>

Em primeiro lugar, eu estava confundindo o separador de dinheiro, com o separador decimal.

Beatriz KMS

unread,
Aug 20, 2009, 1:05:50 PM8/20/09
to list...@googlegroups.com
Fugiu da escola? Isso é matematica basica....
Sim, vc está viajando.

0,5 == 0,5000000



2009/8/20 Igor Escobar <titio...@gmail.com>

Beatriz KMS

unread,
Aug 20, 2009, 1:09:18 PM8/20/09
to list...@googlegroups.com
Ele está dizendo que 0,01 (dinheiro) é 1 centavo!!!

2009/8/20 Igor Escobar <titio...@gmail.com>

Kico Zaninetti

unread,
Aug 20, 2009, 1:09:04 PM8/20/09
to list...@googlegroups.com
são as funções matemáticas básicas.

vai pegar a parte decimal do número e multiplicar por 100

2009/8/20 MEM <tal...@gmail.com>

Toshyro

unread,
Aug 20, 2009, 1:14:08 PM8/20/09
to list...@googlegroups.com
Eae!!!

Pergunto: não vale a pena tu criar uma função que faça isso pra ti? Digo, mantém os dados originais no banco (0,01) e na hora de apresentar (ou na hora em que for necessário), tu roda uma função que faz isso pra ti...

function converte ( $valor )
{
    $return = $valor * 10;
    return $valor . ' cêntimo' . ($return > 1 ? 's' : '' );
}

Abraço

--
Toshyro


2009/8/20 MEM <tal...@gmail.com>

Luiz Escobar

unread,
Aug 20, 2009, 1:17:32 PM8/20/09
to list...@googlegroups.com
43,30 é igualzinho á 43,300   porque ZERO depois da virgula á direita tem a mesma função do ZERO á esquerda antes da virgula, num vale nada....
 
043,300 = 043,30 = 043,3 = 43,3 = 43,30 = 43,300 = (43 virgula 3)
bate na calculadora , 43,30000000000000 e aperta + pra ver o que acontece !
 
( estamos falando de CASAS DECIMAIS depois da VIRGULA )
 
AGORA:
43,3 != 43,03 != 43,003
São valores totalmente diferentes... ai pra representar VISUALMENTE no formato HUMANO (vamos assim dizer) ficaria melhor mostra-los assim:
43,300
43,030
43,003
mas poderia ser também
43,3
43,03
43,003
que em uma soma dos 3 daria: 129,333
 
Agora quere que armazene hora 43,300, hora 43,3, hora 43,30, só fazendo em formato STRING/CARACTER mesmo, ai vai armazenar o que vc quiser...

[]s
Luiz Escobar - http://www.megasistema.com.br
============================================
Harbour 2.0.0beta2(Rev.11891) (DbfNtx+MySQL)
MiniGUI 1.7 Extended (Build 71)-2009.07.30
BCC 5.8.2 (Turbo C++ Explorer 2006)
--------------------------------------------
XAMPP  1.7.1 (Apache+MySQL+PHP+(Linux/Win))
FLEX   3.0 (iniciante)
--------------------------------------------
Delphi ( 6 PRO & 7 Ent ) (DBF/NTX+MySQL)
============================================

MEM

unread,
Aug 20, 2009, 1:48:22 PM8/20/09
to list...@googlegroups.com

Pois… eu estava fazendo a mesma confusão que o Igor acho eu. A diferença entre uma virgula decimal, e uma vírgula usada para representar o valor monetário:

Monetariamente, se nos disserem: você quer 32,32 dollars ou 32,3200 dollars, ai…. Não é a mesma coisa.

 

Mas para DECIMAL, para a base de dados que guarda decimal, ai, ter 32,32 ou 32,3200 é exactamente o mesmo: nós estamos nos referindo a 32 dollars e 32 cêntimos em ambas as circunstâncias.

 

Mas é bom saber que não estava sozinho nisto. ;p

 

Agora, Toshyro, valeu 5 * seu exemplo. Eu lamento que ainda não seja programador o suficiente para pensar num problema e desenvolver código. Ainda não sou programador portanto, sou leitor. :) Mas hei de lá chegar.

 

Abraço a todos, e obrigado pelas dicas,

Márcio

 


<BR

Kico Zaninetti

unread,
Aug 20, 2009, 2:04:15 PM8/20/09
to list...@googlegroups.com
MEM, monetariamente falando, 32,32 dollars tem o mesmo valor de 32,3200 mas a unidade de precisão é diferente.

2009/8/20 MEM <tal...@gmail.com>

Igor Escobar

unread,
Aug 20, 2009, 2:18:32 PM8/20/09
to list...@googlegroups.com
Sorry, me ambananei aqui...

Bruno Gross

unread,
Aug 20, 2009, 2:32:37 PM8/20/09
to list...@googlegroups.com
1 CENTAVO

1 Cêntimo de real

1 real = 100 x 0,01 real

entendeu?

2009/8/20 Igor Escobar <titio...@gmail.com>



--
Visite: www.UpaLele.com

att.
Bruno Gross
Analista de Sistemas
Celular: (21) 78545483
Rádio ID: 83*39379

Esta mensagem, incluindo seus anexos, pode conter informações confidenciais e/ou privilegiadas. Se você não for a pessoa autorizada a receber esta mensagem, não pode usar, copiar ou divulgar as informações nela contidas ou tomar qualquer ação baseada nessas informações. Caso esta mensagem tenha sido recebida por engano, por favor avise imediatamente o remetente, respondendo o e-mail e em seguida elimine-a do seu sistema. Agradeço sua cooperação.

Beatriz KMS

unread,
Aug 20, 2009, 2:49:11 PM8/20/09
to list...@googlegroups.com
Não senhor.

32,32 == 32,3200 sempre!!!

$R 32,3200 ainda será 32 reais e 32 centavos... só está formatado pra 4 casas decimais.... Ja frequentou posto de gasolina?? Geralmente o preço está formatado com mais de 2 casas decimais... mas se o litro da gasolina estiver R$1,4000 vc vai pagar mais de R$1,40 o litro ??? Claro que nao!!!!

Matematica nao deixa de ser matematica só pq se refere a dinheiro.

Virgula pra separar os centavos em um valor monetario é IGUAL a virgula pra separar casas decimais em um valor qualquer.

Gente.... isso é matematica BASICA!!!!!

Talvez vc esteja confundindo o ponto (separador de milhar) com a virgula (separador de casa decimal).... coisa que no php acontece ao contrario pq é em ingles.....


2009/8/20 MEM <tal...@gmail.com>

MEM

unread,
Aug 20, 2009, 6:44:32 PM8/20/09
to list...@googlegroups.com

Sim, completamente claro. Eu nunca quis dizer que a matemática mudava, mas sim que o modo como lemos os valores muda, de acordo com aquilo que vemos representado em diferentes circunstâncias.

Eu me expressei muito mal, tentando fazer a distinção que você falou: (separador de milhar e separador de casa decimal). Ou a diferença entre valor decimal e unidade de precisão.  Pois usei o mesmo símbolo para os dois, gerando a confusão. Mas a ideia, era exactamente essa que vocês falaram.

 

Não há confusão: se eu vir um preço marcado assim: 32.300 Euros (trinta e dois mil e trezentos euros) – eu vou saber que não tenho dinheiro para pagar.

Se me derem um preço de 32.30 Euros, isto é, (trinta e dois euros e trinta cêntimos), já sou capaz de pagar.

 

Pacífico? :-)

 

 

Abraço,

Márcio

Beatriz KMS

unread,
Aug 20, 2009, 10:00:39 PM8/20/09
to list...@googlegroups.com
Nao parece que está completamente claro. Aí está vc se confundindo de novo.
Decida-se se vc quer usar ponto ou virgula como separador de casas decimais. Não é por menos que vc faça tanta confusão com uma coisa tao simples.

Se 32.30 são 32 euros e 30 centavos, entao 32.300 continuam sendo 32 euros e 30 centavos, afinal aqui o PONTO esta como separador decimal... pra escrever 32 mil e 300 nesse caso vc deveria ter feito 32,300.00 (e virgula como separador de milhar)




2009/8/20 MEM <tal...@gmail.com>

Jean

unread,
Aug 20, 2009, 10:06:37 PM8/20/09
to list...@googlegroups.com
1 real = 100 cêntimos de real
1 real = 10 decimos de real

sim 32,300 = 32 reais e 30 centavos

mas c vc falar q o 300 sao centavos isso vira 3 reais. Tudo ta na
questao de como vc le ehhehe

2009/8/20 Beatriz KMS <beatr...@gmail.com>:
--
[]´s Jean a.k.a Suissa

Tecnólogo em Análise de Sistemas - UTF-PR
131

www.twitter.com/suissacorp

Lucas Almeida

unread,
Aug 20, 2009, 10:07:22 PM8/20/09
to list...@googlegroups.com
[OFF] To morrendo de rir desse topico, principalmente das respostas da Beatriz (sem ofensas) hahahaha [/OFF]
 
[TOPICO]
Para ver como uma coisa tão "simples" pode complicar ^^
 
Abraços

2009/8/20 Beatriz KMS <beatr...@gmail.com>



--
Obrigado!
Lucas de Almeida.
(41) 8449-7802

Jean

unread,
Aug 20, 2009, 10:08:44 PM8/20/09
to list...@googlegroups.com
ahuhuahuahuhuahuahuhaua
eu tb nunca vi, parece ateh um debate filosofico ehhehe

2009/8/20 Lucas Almeida <lucasa...@gmail.com>:

MEM

unread,
Aug 21, 2009, 6:14:42 AM8/21/09
to list...@googlegroups.com

Se 32.30 são 32 euros e 30 centavos, entao 32.300 continuam sendo 32 euros e 30 centavos, afinal aqui o PONTO esta como separador decimal... pra escrever 32 mil e 300 nesse caso vc deveria ter feito 32,300.00 (e virgula como separador de milhar)

:) Tem razão, novamente.

 

Mas, tirando as bombas de gasolina, que têm os números de maneira completa, quando você vê um preço assim: 32.300 Euro – Você saberá que essa representação corresponde a: 32,300.00 Euros. Isto é, se eu for a uma loja e quiser pagar um carro que está marcado (representado) da seguinte forma: Ford Focus - 32.300 Euros, e der, trinta e dois euros e 30 cêntimos, eles não vão me vender o carro. Mesmo que eu argumente que 32.300 é o mesmo que 32.30 !

 

Aqui temos de estar de acordo !!

 

 

É verdade o que diz, a maneira correcta de representar um valor diferente da representação “32.30” ou “32.300” (que correspondem ao mesmo valor) seria fazendo: 32,300.00 mas, visualmente, nas montras das lojas, ele não é assim representado.


Aqui também temos de estar de acordo. !!

Por isso dizia: a matemática não muda mas, o modo como lemos os valores muda, de acordo com aquilo que vemos representado em diferentes circunstâncias. É por isso que, quando alguém lê uma representação de um preço assim: “32.300 Euros”, ele não vai dar trinta e dois euros e 30 cêntimos porque, do outro lado da loja, o gerente vai continuar de mão estendida esperando o resto mesmo que, matematicamente, 32,300 seja igual a 32,30 e igual a 32,3.

Espero que, aqui, também estejamos de acordo. :)

A diferença, talvez seja que a Beatriz está insistindo na importância do ponto e da vírgula, e eu não. :) Eu estou apenas percebendo a lógica, e não me estou preocupando com os pontos e as vírgulas. A Beatriz está.

a)      Tendo em conta apenas a estrutura lógica:
Estaremos de acordo que eles são apenas símbolos sem qualquer valor intrínseco. Isto é, podiam ser elefantes e copos em vez de pontos e vírgulas e continuo achando que seriamos capazes de perceber a diferença entre um preço representado na montra, e a sua representação decimal correcta.

Da mesma forma, se fossem só virgulas, se não houvessem pontos, eu acho que também seriamos capazes de perceber a diferença, de acordo com o contexto em que ela seria representada. Ou, se nos dissessem, atenção: “A segunda vírgula, tem um significado diferente da primeira vírgula”  - estabelecida essa regra, seriamos capazes de retirar a lógica inerente. Certo?

Poderemos então concluir que o ponto e a vírgula, serão apenas representações visuais que nos *ajudam* a interpretar determinados valores mas não são necessárias para a sua (dos valores) correcta determinação, nem necessárias para a compreensão da lógica inerente que distingue o separador decimal, de um separador de milhar.

 

b)     No contexto da nossa discussão, programação, o que a Beatriz está dizendo tem toda a relevância. Afinal, o computador, diferente de nós, não é (ainda) capaz de interpretações semânticas complexas que lhe permitam perceber, que quando a representação visual de um preço aparece de modo diferente num contexto diferente, assim também poderá mudar a leitura que fazemos do valor representado.

Agora, e no contexto da pergunta inicial: Quando guardamos um valor na base de dados, o separador de milhar não tem qualquer relevância. Ele serve apenas de ajuda visual para nós, humanos. O separador decimal, contudo, tem.
E é a esse que devemos dar atenção. Isto é, estamos de acordo que o computador será capaz de multiplicar 320,000.00 Euros, por dois, da seguinte forma: 320000 x 2.

Ou, 320,000.34 Euros assim: 320000,34 x 2. E que se, ao invés desta última, tivéssemos essa multiplicação computada assim: 320034 x 2 isto já não seria correcto.

Está certa esta minha última interpretação?

Manda vir… :)

Luiz Escobar

unread,
Aug 21, 2009, 2:27:23 PM8/21/09
to list...@googlegroups.com
Meu amigo, se já se perdeu na sua confusão, ou você esta precisando de mais café ou de dormir mesmo..... rsrsrs
 
Resolve qual tipo de moeda (notação vai usar) :
  PONTO (.) pra milhar e VIRGULA (,) pra decimal
ou
  VIRGULA (,) pra milhar e PONTO (.) pra decimal
 
TIPO no brasil "REAL (R$)" usamos a primeira
R$1.000,01 (mil reais e 1 centavo)
 
EUA ou USA (Estados Unidos América) "Dólares ($)" usamos a segunda:
$1,000.01  (mil dólares  e 1 centavo )
 
Então se for em REAL
32.300 é trinta e dois mil reais e trezentos reais
32,300 é trinta e dois reais e 30 (trinta) centavos
32,030 é trinta e dois reais e 3 (três) centavos
 
se for Dólares
32.300  trinta e dois dólares e 30 (trinta) centavos
32.030  trinta e dois dólares e 3 (três) centavos
32,300  trinta e dois mil e trezentos dólares
 
Se for trabalhar com os dois tipos de moeda, então tem que ter um campo pra informar  onde é Dólar e onde é Real.
Agora não sei se expliquei ou se compliquei... rsrsrsrsr

MEM

unread,
Aug 21, 2009, 3:08:55 PM8/21/09
to list...@googlegroups.com

Oi Luiz,

 

Beatriz já tinha feito notar esse ponto, e eu já respondi num thread anterior.

Café e dormir, um pouco dos dois!! :)

 

Abraço,

Márcio

 

 

<BR

Jean

unread,
Aug 21, 2009, 5:59:40 PM8/21/09
to list...@googlegroups.com
Eu axei q isso ja estava implicito hauhuahua

2009/8/21 Luiz Escobar <esc...@megasistema.com.br>:

Joao Gabriel Nóbrega dos Santos

unread,
Aug 22, 2009, 10:35:43 AM8/22/09
to list...@googlegroups.com
Pra galerinha q andou faltando aula no ensino fundamental:

http://pessoal.sercomtel.com.br/matematica/fundam/fracoes/fracdec.htm



2009/8/21 Jean <jnasc...@gmail.com>



--
Joao Gabriel Nóbrega dos Santos
Sistemas para Internet - IFPB
www.twitter.com/joao2507
+55 83 8826-9877
Reply all
Reply to author
Forward
0 new messages