Erro ao Transformar String para Number

6 views
Skip to first unread message

Rodrigo Barrocal

unread,
Nov 6, 2009, 3:52:48 PM11/6/09
to flexdev
Pessoall,

Alguem já viu isso. e Resolveu.

trace( Number("10000000000000025") ) // output: 10000000000000024

[]´s

RafaelViana

unread,
Nov 6, 2009, 4:34:29 PM11/6/09
to flexdev
Estranho :S

Pensei que pudesse estar relacionado ao valor máximo que um number é
capaz de armazenar, mas fazendo o seguinte:

trace( Number("10000000000000025") );
trace( Number("10000000000000026") );

Tenho essa saída:

10000000000000024
10000000000000026

Agora fiquei curioso também

Portillo

unread,
Nov 7, 2009, 8:50:16 AM11/7/09
to flexdev
Tente assim:

> trace(parseFloat("10000000000000025") );

RafaelViana escreveu:

Rodrigo Barrocal

unread,
Nov 9, 2009, 7:32:06 AM11/9/09
to flexdev
Mesma coisa. : 10000000000000024

Gustavo Kawamoto

unread,
Nov 10, 2009, 1:35:47 AM11/10/09
to fle...@googlegroups.com
Esse é um problema dessas linguagens (Javascript, Actionscript). Ela não tem precisão numérica para cálculos com muitos dígitos (a chamada BigMath), pois eles utilizam classes especiais que consomem muitos recursos da máquina. Como disseram outra vez na lista de javascript, se você precisa trabalhar com esse tipo de número, talvez Actionscript não seja a linguagem que você precisa usar.

Espero ter ajudado.

--
Gustavo Y. Kawamoto


2009/11/9 Rodrigo Barrocal <barrocal...@gmail.com>

Rodrigo Barrocal

unread,
Nov 10, 2009, 9:49:54 AM11/10/09
to flexdev
Isso já imaginava. mas não posso mudar o projeto pq o ActionScript não
sabe resolver números grandes.

E em meus testes o javascript nisso não errou, o posso fazer é passar
para o javascript fazer esses cálculos e devolver para o flex
calculado.

Se não jogar 8 meses de trabalho fora não rola.

On 10 nov, 04:35, Gustavo Kawamoto <gust...@asflake.com> wrote:
> Esse é um problema dessas linguagens (Javascript, Actionscript). Ela não tem
> precisão numérica para cálculos com muitos dígitos (a chamada BigMath), pois
> eles utilizam classes especiais que consomem muitos recursos da máquina.
> Como disseram outra vez na lista de javascript, se você precisa trabalhar
> com esse tipo de número, talvez Actionscript não seja a linguagem que você
> precisa usar.
>
> Espero ter ajudado.
>
> --
> Gustavo Y. Kawamoto
>
> 2009/11/9 Rodrigo Barrocal <barrocal.rodr...@gmail.com>

Gustavo Kawamoto

unread,
Nov 10, 2009, 11:59:54 AM11/10/09
to fle...@googlegroups.com
Cara, estranho, porque isso é da especificação das linguagens. Tanto no JS quanto no AS devem dar problemas. Em que browser você testou?

Na realidade não é necessário nem utilizar as funções pra converter. Tente colar isso no navegador do seu browser:

javascript: alert(10000000000000025);

Aqui o erro persistiu no Chrome 3.0, no IE 7.0 e no Firefox 3.5.4

--
Gustavo Y. Kawamoto


2009/11/10 Rodrigo Barrocal <barrocal...@gmail.com>

Rodrigo Barrocal

unread,
Nov 12, 2009, 3:23:57 PM11/12/09
to flexdev
Eu não fiz, mas outra equipe testou no safari do Mac e o erro não
ocorreu ...

Vou fazer um java e usar remote object para fazer os cálculos.

att.

On 10 nov, 14:59, Gustavo Kawamoto <gust...@asflake.com> wrote:
> Cara, estranho, porque isso é da especificação das linguagens. Tanto no JS
> quanto no AS devem dar problemas. Em que browser você testou?
>
> Na realidade não é necessário nem utilizar as funções pra converter. Tente
> colar isso no navegador do seu browser:
>
> javascript: alert(10000000000000025);
>
> Aqui o erro persistiu no Chrome 3.0, no IE 7.0 e no Firefox 3.5.4
>
> --
> Gustavo Y. Kawamoto
>
> 2009/11/10 Rodrigo Barrocal <barrocal.rodr...@gmail.com>

Rodrigo Barrocal

unread,
Nov 12, 2009, 3:25:33 PM11/12/09
to flexdev
Acho que no meus teste fiz com um char a menos.

On 10 nov, 04:35, Gustavo Kawamoto <gust...@asflake.com> wrote:
> Esse é um problema dessas linguagens (Javascript, Actionscript). Ela não tem
> precisão numérica para cálculos com muitos dígitos (a chamada BigMath), pois
> eles utilizam classes especiais que consomem muitos recursos da máquina.
> Como disseram outra vez na lista de javascript, se você precisa trabalhar
> com esse tipo de número, talvez Actionscript não seja a linguagem que você
> precisa usar.
>
> Espero ter ajudado.
>
> --
> Gustavo Y. Kawamoto
>
> 2009/11/9 Rodrigo Barrocal <barrocal.rodr...@gmail.com>

Gustavo Kawamoto

unread,
Nov 12, 2009, 3:32:42 PM11/12/09
to fle...@googlegroups.com
Eu passei por esse problema algumas vezes e finalmente tomei vergonha na cara e portei a versão da BigDecimal em javascript para o AS3: http://code.google.com/p/as3bigdecimal/
Agora não tem erro :D

--
Gustavo Y. Kawamoto


2009/11/12 Rodrigo Barrocal <barrocal...@gmail.com>

Ricardo Gobbo

unread,
Nov 12, 2009, 4:43:52 PM11/12/09
to fle...@googlegroups.com
voce usa linguagem de servidor ou é uma aplicacao air?
pq se for a primeira opcao, mande o numero como String mesmo... dai no servidor voce transforma em number... se quiser, pode ate usar a API do blazeDS pra isso...

abraco xD

2009/11/12 Gustavo Kawamoto <gus...@asflake.com>



--
Att.
Ricardo Gôbbo de Águas
Engenharia de Computação - Universidade Federal de Goiás
www.ricardogobbo.wordpress.com
www.twitter.com/ricardogobbo

Gustavo Kawamoto

unread,
Nov 12, 2009, 5:51:32 PM11/12/09
to fle...@googlegroups.com
não, ela é feita para rodar direto no actionscript, sem AIR, sem
servidor, sem nada :)

--
Gustavo Y. Kawamoto

Rodrigo Barrocal

unread,
Nov 13, 2009, 8:39:45 AM11/13/09
to flexdev
Cara, te amo. salvou meu dia.

On 12 nov, 20:51, Gustavo Kawamoto <gust...@asflake.com> wrote:
> não, ela é feita para rodar direto no actionscript, sem AIR, sem
> servidor, sem nada :)
>
> --
> Gustavo Y. Kawamoto
>
> On 11/12/09, Ricardo Gobbo <ricardogobbodeag...@gmail.com> wrote:
>
> > voce usa linguagem de servidor ou é uma aplicacao air?
> > pq se for a primeira opcao, mande o numero como String mesmo... dai no
> > servidor voce transforma em number... se quiser, pode ate usar a API do
> > blazeDS pra isso...
>
> > abraco xD
>
> > 2009/11/12 Gustavo Kawamoto <gust...@asflake.com>
>
> >> Eu passei por esse problema algumas vezes e finalmente tomei vergonha na
> >> cara e portei a versão da BigDecimal em javascript para o AS3:
> >>http://code.google.com/p/as3bigdecimal/
> >> Agora não tem erro :D
>
> >> --
> >> Gustavo Y. Kawamoto
>
> >> 2009/11/12 Rodrigo Barrocal <barrocal.rodr...@gmail.com>

Mário Júnior

unread,
Nov 13, 2009, 11:22:19 AM11/13/09
to fle...@googlegroups.com
boa contribuiçao, parabéns.


2009/11/12 Gustavo Kawamoto <gus...@asflake.com>



--
Mario Junior
Enterprise Java / Flex Architectures
Adobe Certified Expert Flex 3 with AIR

Sofshore Informática
http://www.sofshore.com.br
+55 (48) 3337 2003
Rua Pastor Willian Richard Schisler Filho 452 sl 102, 88034-100 Itacorubi
Florianopolis SC Brasil

Rodrigo Barrocal

unread,
Nov 13, 2009, 12:37:19 PM11/13/09
to flexdev
Para quem usa o Component Numeric Input do Fabio da Silva. e tem, teve
ou terá problemas com o Number. mudei o metodo que ocorre o problema
de number.

e ficou assim:

[Bindable(event="valueChange")]
public function set value(value:Object):void {

var onlydigits:String = this.returnDigits(value);

var input:BigDecimal = new BigDecimal(onlydigits);
input = input.setScale(2);

var divideby:BigDecimal = new BigDecimal("100");

var bigNumber:BigDecimal = input.divide(divideby);
bigNumber = bigNumber.setScale(2);

var pattern_fillzero:RegExp = /^,\d{1,2}/g;
var pattern_changetocomma:RegExp = /\./g;
var pattern_thousand:RegExp = /\d{1,3}(?=(\d{3})+(?!\d))/g;

var bigValue:String = bigNumber.toString();
var bigText:String = bigValue;

bigText = bigText.replace(pattern_fillzero,"0$&");
bigText = bigText.replace(pattern_changetocomma,",");
bigText = bigText.replace(pattern_thousand,"$&.");

this._value = bigValue;
this.text = bigText;

this.dispatchEvent(new Event(NumericInput.VALUE_CHANGE));
}
Com sua permissão Fabio, claro.
Obrigado a todos.


On 13 nov, 14:22, Mário Júnior <juninho...@gmail.com> wrote:
> boa contribuiçao, parabéns.
>
> 2009/11/12 Gustavo Kawamoto <gust...@asflake.com>
>
>
>
>
>
> > não, ela é feita para rodar direto no actionscript, sem AIR, sem
> > servidor, sem nada :)
>
> > --
> > Gustavo Y. Kawamoto
>
> > On 11/12/09, Ricardo Gobbo <ricardogobbodeag...@gmail.com> wrote:
> > > voce usa linguagem de servidor ou é uma aplicacao air?
> > > pq se for a primeira opcao, mande o numero como String mesmo... dai no
> > > servidor voce transforma em number... se quiser, pode ate usar a API do
> > > blazeDS pra isso...
>
> > > abraco xD
>
> > > 2009/11/12 Gustavo Kawamoto <gust...@asflake.com>
>
> > >> Eu passei por esse problema algumas vezes e finalmente tomei vergonha na
> > >> cara e portei a versão da BigDecimal em javascript para o AS3:
> > >>http://code.google.com/p/as3bigdecimal/
> > >> Agora não tem erro :D
>
> > >> --
> > >> Gustavo Y. Kawamoto
>
> > >> 2009/11/12 Rodrigo Barrocal <barrocal.rodr...@gmail.com>
> Sofshore Informáticahttp://www.sofshore.com.br

fabiophx

unread,
Nov 13, 2009, 2:57:31 PM11/13/09
to flexdev
Rodrigo,
Blz. Os componentes q disponibilizei podem ser utilizados,
alterados, etc como desejar.

[]s

Fabio da Silva
http://fabiophx.blogspot.com/
Reply all
Reply to author
Forward
0 new messages