Как найти количество цифр(символов) в числе float
Так Вы и так увидите количество символов при выводе, если не форматировать.
Или в чем суть вопроса?
Если речь не о конвертации в строку (с каким-то округлением) готовыми средствами языка (sprintf
, …), то сложно
Так что всё зависит от интерпретации задачи.
Например, гугл такую подсказал:
https://stackoverflow.com/a/17844221/964478
Given a floating point number, find the shortest decimal representation that would be re-interpreted as the same floating point value with correct rounding.
Once formulated like this, the answer is Yes we can - see this algorithm:
Printing floating point numbers quickly and accurately. Robert G. Burger and R. Kent Dybvig. ACM SIGPLAN 1996 Conference on Programming Language Design and Implementation, June 1996
http://www.cs.indiana.edu/~dyb/pubs/FP-Printing-PLDI96.pdf
See also references from Compute the double value nearest preferred decimal result for a Smalltalk implementation.
Да нетрудно считаем до потери точности и переводим в десятичные если надо.
uses math;
...
var s, eps:Single;
BitCount, Digits:Integer;
i:Integer;
begin
Eps:=1;
i:=0;
repeat
S:=1+Eps;
if s=1 then
begin
BitCount:=i-1;
Break;
end;
Eps:=Eps/2;
inc(i);
until false;
Digits:=Trunc(BitCount/Log2(10)+1);
caption:=Format('Количество бит=%d количество десятичных знаков=%d',[BitCount,Digits]);
end;
Деноминацию ещё учесть для полного счастья.
П.С. В Delphi Float это Single.