Problemas com campo float mysql

895 views
Skip to first unread message

Mychel Candido

unread,
Mar 26, 2010, 2:32:23 PM3/26/10
to php-b...@googlegroups.com
Boa tarde galera estou com um problema e nao estou achando nenhuma
solucao na net

eu tenho um campo float (16,2) no banco de dados mais quando eu vou
inserir o valor
131629,60 ele nao insere ele insere 131629,59
o mais estranho que o 131629,61 ele aceita somente o numero 131629,60
que nao vai de jeito nenhum alguem sabe o pq?

Michel Candido
Programador de Sistemas WEB
Fone:84610712
msn:myche...@hotmail.com

maiquel krolikowski leonel

unread,
Mar 26, 2010, 2:37:31 PM3/26/10
to php-b...@googlegroups.com
usa numeric(16,2) que funciona.. isso é um bug antigo do mysql....


--
Você está recebendo esta mensagem porque se inscreveu no grupo "php-brasil" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para php-b...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para php-brasil+...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/php-brasil?hl=pt-BR.




--
Maiquel Leonel
web developer
http://www.maiquelleonel.com.br
mai...@maiquelleonel.com.br / skywi...@gmail.com

Luiz Escobar

unread,
Mar 26, 2010, 4:33:43 PM3/26/10
to php-b...@googlegroups.com
Não é bem assim, não tem nada haver com BUG....
mas usa o "DECIMAL(16,2)"  que resolve...
 
Mesma coisa que falar que deve-se usar o SHARED para abrir o arquivo compartilhado pq tem um BUG na linguagem....
 
leia mais pra saber as DIFs
 
 
 
[]s
Luiz Escobar

maiquel krolikowski leonel

unread,
Mar 26, 2010, 4:48:17 PM3/26/10
to php-b...@googlegroups.com
ah, o arredondamento de campo float do mysql não é bug???

tah bom...

Luiz Escobar

unread,
Mar 26, 2010, 5:01:30 PM3/26/10
to php-b...@googlegroups.com
Usei :
 
 
 
 
 
 
 
Campo Tipo Atributos Nulo Padrão Extra Ações
float(10,2) Não 0.00 Browse distinct values Alterar Eliminar Primária Único Índice Texto completo
decimal(10,2) Não 0.00 Browse distinct values Alterar Eliminar Primária Único Índice Texto completo
Com marcados: Marcar todos / Desmarcar todos Com marcados:
 
 
Textos completos vfloat vdec
Editar Remover 14.40 14.40
Editar Remover 16.80 16.80
Editar Remover 15.40 15.40
Editar Remover 16.80 16.80
 
 
b_browse.png
b_edit.png
b_drop.png
b_primary.png
b_unique.png
b_index.png
bd_ftext.png
arrow_ltr.png
s_fulltext.png

maiquel krolikowski leonel

unread,
Mar 26, 2010, 5:25:44 PM3/26/10
to php-b...@googlegroups.com

"Que bom...." kkk

até o 5.0.alguma coisa nao tinha sido corrigido.... vai ver corrigiram...
b_primary.png
b_index.png
arrow_ltr.png
b_drop.png
b_edit.png
bd_ftext.png
b_unique.png
s_fulltext.png
b_browse.png

Luiz Escobar

unread,
Mar 26, 2010, 8:28:00 PM3/26/10
to php-b...@googlegroups.com

Desculpa, esqueci de colocar a vers�o, �essa era da 3.23 em MyISAM
usei o PHPMyADMIN para criar e add os dados....

agora na 5.1.37
+�Op��es





vflotvdec
EditarRemover51.3751.37
EditarRemover51.0051.00
EditarRemover5137.005137.00
EditarRemover12.0112.01


========================
Luiz Escobar (webmail)
O Diario R�dio e Televis�o LTDA





------------- Segue mensagem original! -------------

De: maiquel krolikowski leonel
Data: Fri, 26 Mar 2010 18:25:44 -0300
Para: php-b...@googlegroups.com
Assunto: Re: [php-brasil] Problemas com campo float mysql


"Que bom...." kkk

at� o 5.0.alguma coisa nao tinha sido corrigido.... vai ver corrigiram...



Em 26 de mar�o de 2010 18:01, Luiz Escobar <esc...@megasistema.com.br> escreveu:
Usei :
Campo Tipo Atributos Nulo
Padr�o Extra A��es
float(10,2) N�o
0.00 Browse distinct values Alterar Eliminar
Prim�ria �nico �ndice Texto completo
decimal(10,2) N�o
0.00 Browse distinct values Alterar Eliminar
Prim�ria �nico �ndice Texto completo

ah, o arredondamento de campo float do mysql n�o � bug???

tah bom...

Em 26 de mar�o de 2010 17:33, Luiz Escobar <esc...@megasistema.com.br> escreveu:
N�o � bem assim, n�o�tem nada haver com BUG....
mas usa o "DECIMAL(16,2)"�que resolve...
Mesma coisa que falar que deve-se usar o SHARED para abrir o arquivo compartilhado pq tem um BUG na linguagem....
leia mais pra saber as DIFs
[]s
Luiz Escobar
Sent: Friday, March 26, 2010 3:37 PM
Subject: Re: [php-brasil] Problemas com campo float mysql

usa numeric(16,2) que funciona.. isso � um bug antigo do mysql....

Em 26 de mar�o de 2010 15:32, Mychel Candido <mychel...@gmail.com> escreveu:
Boa tarde galera estou com um problema e nao estou achando nenhuma
solucao na net

eu tenho um campo float (16,2) no banco de dados mais quando eu vou
inserir o valor
131629,60 ele nao insere ele insere 131629,59
o mais estranho que o 131629,61 ele aceita somente o numero 131629,60
que nao vai de jeito nenhum alguem sabe o pq?



Michel Candido
Programador de Sistemas WEB
Fone:84610712
msn:myche...@hotmail.com

--
Voc� est� recebendo esta mensagem porque se inscreveu no grupo "php-brasil" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para php-b...@googlegroups.com.
Para cancelar a inscri��o nesse grupo, envie um e-mail para php-brasil+...@googlegroups.com.
Para obter mais op��es, visite esse grupo em http://groups.google.com/group/php-brasil?hl=pt-BR.

--
Voc� est� recebendo esta mensagem porque se inscreveu no grupo "php-brasil" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para php-b...@googlegroups.com.
Para cancelar a inscri��o nesse grupo, envie um e-mail para php-brasil+...@googlegroups.com.
Para obter mais op��es, visite esse grupo em http://groups.google.com/group/php-brasil?hl=pt-BR.

--
Voc� est� recebendo esta mensagem porque se inscreveu no grupo "php-brasil" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para php-b...@googlegroups.com.
Para cancelar a inscri��o nesse grupo, envie um e-mail para php-brasil+...@googlegroups.com.
Para obter mais op��es, visite esse grupo em http://groups.google.com/group/php-brasil?hl=pt-BR.

--
Voc� est� recebendo esta mensagem porque se inscreveu no grupo "php-brasil" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para php-b...@googlegroups.com.
Para cancelar a inscri��o nesse grupo, envie um e-mail para php-brasil+...@googlegroups.com.
Para obter mais op��es, visite esse grupo em http://groups.google.com/group/php-brasil?hl=pt-BR.

--
Voc� est� recebendo esta mensagem porque se inscreveu no grupo "php-brasil" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para php-b...@googlegroups.com.
Para cancelar a inscri��o nesse grupo, envie um e-mail para php-brasil+...@googlegroups.com.
Para obter mais op��es, visite esse grupo em http://groups.google.com/group/php-brasil?hl=pt-BR.

--
Voc� est� recebendo esta mensagem porque se inscreveu no grupo "php-brasil" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para php-b...@googlegroups.com.
Para cancelar a inscri��o nesse grupo, envie um e-mail para php-brasil+...@googlegroups.com.
Para obter mais op��es, visite esse grupo em http://groups.google.com/group/php-brasil?hl=pt-BR.

maiquel krolikowski leonel

unread,
Mar 27, 2010, 12:09:26 AM3/27/10
to php-b...@googlegroups.com
desculpa mas  É bug veja

QUERY realizada:
1 linha(s) afetadas.

UPDATE `wilsongps_test`.`numeric_test` SET `float` = '17536482.60' WHERE CONCAT( `numeric_test`.`decimal` ) = '123.90' AND CONCAT( `numeric_test`.`float` ) = 17.00 LIMIT 1 ;

resultado na tabela:

decimal float
83.23 32.56
23.50 14.60
82.10 15.00
123.90 17536482.00

estrutura da mesma usando INNODB

Campo Tipo Collation Atributos Nulo Padrão Extra Ação
decimal(16,2)
UNSIGNED Não None
Navegador distingue valores Alterar Eliminar
float(16,2)
UNSIGNED Não None
Navegador distingue valores Alterar Eliminar


a mesma tabela usando INSERT

query:
INSERT INTO numeric_test
VALUES (
"123654.30", "123654.30"
), (
"18123654.80", "18123654.80"
), (
"18123654.50", "18123654.50"
), (
"1918123654.70", "1918123654.70"
);


resultado :

decimal float



83.23 32.56



23.50 14.60



82.10 15.00



123.90 17536482.00



123654.30 123654.30



18123654.80 18123654.00



18123654.50 18123654.00



1918123654.70 1918123648.00

note que agora usei os mesmos numeros em ambos os campos...

agora em myisam


Campo Tipo Collation Atributos Nulo Padrão Extra Ação
decimal(16,2)
UNSIGNED Não None
Navegador distingue valores Alterar Eliminar
float(16,2)
UNSIGNED Não None
Navegador distingue valores Alterar Eliminar

Query...

INSERT INTO numeric_test_myisam
VALUES (
"123.60", "123.60"
), (
"123456.50", "123456.50"
), (
"1123456.90", "1123456.90"
), (
"1123456.78", "1123456.78"
)


resultado:


decimal_my float_my
Editar Remover 123.60 123.60
Editar Remover 123456.50 123456.50
Editar Remover 1123456.90 1123456.88
Editar Remover 1123456.78 1123456.75

nem fiz o teste com UPDATE...

versao dos softwares

MySQL

  • Servidor: Localhost via UNIX socket
  • Versão do Servidor: 5.0.83-0ubuntu3
  • Versão do Protocolo: 10
  • Usuário: root@localhost
  • Conjunto de caracteres MySQL: UTF-8 Unicode (utf8)

Web server

  • Apache/2.2.12 (Ubuntu)
  • Versão do cliente MySQL: 5.1.37
  • PHP extension: mysqli

phpMyAdmin

  • Informações da versão: 3.2.2.1deb1
bizarro não?

Em 26 de março de 2010 21:28, Luiz Escobar <esc...@megasistema.com.br> escreveu:

Desculpa, esqueci de colocar a versão,  essa era da 3.23 em MyISAM
usei o PHPMyADMIN para criar e add os dados....

agora na 5.1.37
vflot vdec
Editar Remover 51.3751.37
Editar Remover 51.0051.00
Editar Remover 5137.005137.00
Editar Remover 12.0112.01


========================
Luiz Escobar (webmail)
O Diario Rádio e Televisão LTDA





------------- Segue mensagem original! -------------

De: maiquel krolikowski leonel
Data: Fri, 26 Mar 2010 18:25:44 -0300
Para: php-b...@googlegroups.com
Assunto: Re: [php-brasil] Problemas com campo float mysql


"Que bom...." kkk

até o 5.0.alguma coisa nao tinha sido corrigido.... vai ver corrigiram...



Em 26 de março de 2010 18:01, Luiz Escobar <esc...@megasistema.com.br> escreveu:
Usei :
 
 
 
 
 
 
 
Campo Tipo Atributos Nulo
Padrão Extra Ações
float(10,2) Não
0.00 Browse distinct values Alterar Eliminar
Primária Único Índice
Texto completo
decimal(10,2) Não
0.00 Browse distinct values Alterar Eliminar
Primária Único Índice
Texto completo

ah, o arredondamento de campo float do mysql não é bug???

tah bom...

Em 26 de março de 2010 17:33, Luiz Escobar <esc...@megasistema.com.br> escreveu:
Não é bem assim, não tem nada haver com BUG....
mas usa o "DECIMAL(16,2)"  que resolve...
 
Mesma coisa que falar que deve-se usar o SHARED para abrir o arquivo compartilhado pq tem um BUG na linguagem....
 
leia mais pra saber as DIFs
 
 
 
[]s
Luiz Escobar
 
 
 
 
 
Sent: Friday, March 26, 2010 3:37 PM
Subject: Re: [php-brasil] Problemas com campo float mysql

usa numeric(16,2) que funciona.. isso é um bug antigo do mysql....

Em 26 de março de 2010 15:32, Mychel Candido <mychel...@gmail.com> escreveu:
Boa tarde galera estou com um problema e nao estou achando nenhuma
solucao na net

eu tenho um campo float (16,2) no banco de dados mais quando eu vou
inserir o valor
131629,60 ele nao insere ele insere 131629,59
o mais estranho que o 131629,61 ele aceita somente o numero 131629,60
que nao vai de jeito nenhum alguem sabe o pq?



Michel Candido
Programador de Sistemas WEB
Fone:84610712
msn:myche...@hotmail.com

--
Você está recebendo esta mensagem porque se inscreveu no grupo "php-brasil" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para php-b...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para php-brasil+...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/php-brasil?hl=pt-BR.

--
Você está recebendo esta mensagem porque se inscreveu no grupo "php-brasil" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para php-b...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para php-brasil+...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/php-brasil?hl=pt-BR.

--
Você está recebendo esta mensagem porque se inscreveu no grupo "php-brasil" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para php-b...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para php-brasil+...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/php-brasil?hl=pt-BR.

--
Você está recebendo esta mensagem porque se inscreveu no grupo "php-brasil" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para php-b...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para php-brasil+...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/php-brasil?hl=pt-BR.

--
Você está recebendo esta mensagem porque se inscreveu no grupo "php-brasil" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para php-b...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para php-brasil+...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/php-brasil?hl=pt-BR.

--
Você está recebendo esta mensagem porque se inscreveu no grupo "php-brasil" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para php-b...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para php-brasil+...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/php-brasil?hl=pt-BR.

--
Você está recebendo esta mensagem porque se inscreveu no grupo "php-brasil" dos Grupos do Google.

Para postar neste grupo, envie um e-mail para php-b...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para php-brasil+...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/php-brasil?hl=pt-BR.

Elton Schivei Costa

unread,
Mar 27, 2010, 10:45:02 AM3/27/10
to php-b...@googlegroups.com
Sim, mas, a versão apresentada pelo Luiz é a 5.1.x, onde este bug não mais existe.

att.

Luiz Escobar

unread,
Mar 29, 2010, 1:24:34 PM3/29/10
to php-b...@googlegroups.com
OPA, pera ai, se ta usando InnoDB, meu exemplo é MyISAM....  pode ser isso....
 
Vamos verificar.......
 
posi eu testei no 3.23.xx e no 5.1.xx  mas com MyISAM e não deu...  vou até testar seu query...  OK !? ja ja retorno...
 
[]s
Luiz

Luiz Escobar

unread,
Mar 29, 2010, 1:25:56 PM3/29/10
to php-b...@googlegroups.com
Usei as versão 3.23.xx e 5.1.xx  porem com tabelas MyISAM e o exemplo de um amigo aqui era em InnoDB...  vamos ver , vou testar as querys dele nas 4 possíveis opções...
 
[]s
Luiz Escobar

Elton Schivei Costa

unread,
Mar 29, 2010, 1:29:15 PM3/29/10
to php-b...@googlegroups.com
Luiz, boa observação, olhando por este ângulo, nunca tive problemas com tabelas INNODB no mysql.

Acho que já encontramos um finished nesse ponto da thread! :)

Avisa aeh se era isso mesmo.

maiquel krolikowski leonel

unread,
Mar 29, 2010, 1:48:34 PM3/29/10
to php-b...@googlegroups.com
Luiz eu usei tanto INNODB quanto MyISAM é só ver os códigos que postei

Luiz Escobar

unread,
Mar 29, 2010, 2:24:50 PM3/29/10
to php-b...@googlegroups.com
É, parece q devo desculpas ao nosso amigo....

B.5.5.8. Problems with Floating-Point Values

Floating-point numbers sometimes cause confusion because they are approximate and not stored as exact values. A floating-point value as written in an SQL statement may not be the same as the value represented internally. Attempts to treat floating-point values as exact in comparisons may lead to problems. They are also subject to platform or implementation dependencies. The FLOAT and DOUBLE data types are subject to these issues. Before MySQL 5.0.3, DECIMAL comparison operations are approximate as well.

Tradução GOOGADA...

B.5.5.8. Problemas com ponto flutuante de Valores 
Números de ponto flutuante por vezes, causar confusão, porque eles são aproximados e não armazenados como 
valores exatos. Um valor de ponto flutuante como escrito em uma instrução SQL não pode ser o mesmo que o 
valor representado internamente. As tentativas de tratar valores de ponto flutuante como exato em comparações 
levar a problemas. Eles também estão sujeitos a plataforma ou dependências de execução. O flutuador eo 
DUPLO tipos de dados estão sujeitos a estas questões. Antes do MySQL 5.0.3, operações de comparação DECIMAL 
são aproximados também.

 

O teste que fiz foi um pouco diferente, acho q por isso que funcionou, sempre com o banco vazio inserindo 2 linhas  parece funcionar, porem com mais dados como do amigo, ai já apresenta o problema...

É, vivendo e aprendendo, mais uma pro caderninho, obrigado, eu sempre usei BIGINT e DECIMAL, por isso nunca tive problemas e nem fui atrás ...

[]s

Luiz Escobar

 
Sent: Saturday, March 27, 2010 11:45 AM

Luiz Escobar

unread,
Mar 29, 2010, 2:32:54 PM3/29/10
to php-b...@googlegroups.com
Mas assim, se o FLOAT foi feito pra APROXIMAÇÕES, então o uso dele é que esta errado, para cálculos exatos, então isso não é um BUG e sim um uso errado do TIPO do dado. ( leia mais em: )
 

6.2.1. Tipos Numéricos

MySQL suporta todos os tipos numéricos da ANSI/ISO SQL92. Estes tipos incluem o tipos de dados numéricos exatos (NUMERIC, DECIMAL, INTEGER, e SMALLINT), assim como o tipos de dados numéricos aproximados (FLOAT, REAL, eDOUBLE PRECISION). A palavra-chave INT é um sinônimo para INTEGER, e a palavra-chave DEC é um sinônimo paraDECIMAL.

Os tipos NUMERIC e DECIMAL são implementados como o mesmo tipo pelo MySQL, como permitido pelo padrão SQL92. Eles são usados por valores para os quais é importante preservar a exatidão como, por exemplo, dados monetários. Quando é declarado um campo de algum desses tipos a precisão e a escala podem ser (e normalmente é) especificadas; por exemplo:

 
 
[]s
Luiz Escobar
Intel + e deixemos de AiMeuDeus....
 
 
 
 
 
Sent: Saturday, March 27, 2010 11:45 AM

Mychel Candido

unread,
Mar 29, 2010, 3:14:13 PM3/29/10
to php-b...@googlegroups.com
Vlw a todas as dicas passadas por voces...., agradeco a todos pude tirar minha duvida e aprender ao mesmo tempo...

Michel Candido
Programador de Sistemas WEB
Fone:84610712
msn:myche...@hotmail.com



Luiz Escobar

unread,
Mar 29, 2010, 3:19:23 PM3/29/10
to php-b...@googlegroups.com
Resumindo, ambos estão certos, mas tem um erro, que é o USO errado, e não um BUG... Smiley piscando Emoticon
 
[]s
Luiz Escobar
 
 
 
Emoticon3.gif
Reply all
Reply to author
Forward
0 new messages