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
:) 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
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
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,
Em primeiro lugar, eu estava confundindo o separador de dinheiro, com o separador decimal.
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
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
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… :)
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