Fórum Formatação Float - Uma certa anomalia #559363

18/07/2016

0

Não sei se já perceberam, mas ai vai uma questão que o delphi faz e tem me causado dor de cabeça.
Delphi 10.1 Berlin, Windows 7 x64.

var
value: extended;
valuestring: String;
...
...

value:= StrToFloat('0.0001');
//value entra com 0.0001
valuestring:= FloatToStr(value);
//realmente retorna 0.0001

//onde mora o problema
value:= StrToFloat('0.00001');
//value entra com 1e-5
valuestring:= FloatToStr(value);
//realmente retorna 1e-5

Segundo padrão de ponto flutuante e precisão
deveria retornar o valor 0.00001
pois a precisão permite o armazenamento de 00001 e expoente 0

Faça isto no excel, por exemplo, sem formatação e irá verificar isto.

Assim tenho que desenvolver uma função de tratamento deste caso na unha, para separar e tratar cada casa decimal e casos de numero cientifico e numero normal. estou quase terminando ela. Apesar de um pouco complexo, mas ela desenvolve muito rápido. Esta ideia faz praticamente o que o excel desenvolve.

Atentem que por exemplo
0.0000000000000001234567890
isto sim, ele armazena na forma 1,23456789e-16 ou melhor armazenado como 123456789 expoente 15 sinal -
sem perda de precisão ate 15 dígitos de um valor extended 32 ou 64 bits.
Guilherme Wiethaus

Guilherme Wiethaus

Responder

Posts

18/07/2016

Nicolas Kenji

Se você só precisa do valuestring, poderia colocar um FormatFloat, segue o exemplo:


value := 0.00001;
valuestring := FormatFloat('0.#####', value);


Tá retornando o valor que você deseja..
Responder

Gostei + 0

18/07/2016

Guilherme Wiethaus

Ola amigo. Obrigado pela resposta. Mas eu já imaginei que alguém iria vir com esta resposta. Não é isto que estou procurando.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar