Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.09.05;
Скачать: CL | DM;

Вниз

преобразование string в real   Найти похожие ветки 

 
tgrey   (2004-08-16 23:27) [0]

Доброго времени суток!

В файле хранятся вещественные числа, естественно в текстовом виде, например такое 0,221584612969309, при преобразовании в Real, хоть с помощью val хоть с помощью strtofloat, вместо указанного выше числа получается округлённое примерно так 0,2215846127, вопрос в том как это округление отменить, чтоб числа и в файле и в real были одинаковые?


 
GanibalLector ©   (2004-08-16 23:49) [1]

Например использовать Extended. А вообще-то Real+F1 должно помочь...там все описания(с разрядностью) для каждого типа.


 
Паскальные надписи ©   (2004-08-17 01:26) [2]

Считывай по символу.


 
tgrey   (2004-08-17 01:44) [3]

GanibalLector не понимаю при чём тут extended, я говорю что при конвертации из string в real получается округлённое число, число получается короче чем в файле, вот в чём проблема


 
tgrey   (2004-08-17 01:46) [4]

Паскальные надписи если я считаю по символу, что дальше с ними делать, мне вещественное число нужно получить в итоге


 
guest   (2004-08-17 07:25) [5]

Интересно, как ты собираешься "отменить округление" в real? Например, как представить 0.(3) в двоичной системе?
А вообще вот что тебе поможет:
http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=374


 
Рамиль ©   (2004-08-17 08:27) [6]

Как это при чем extended? Real не обеспечит такой точности.


 
Паскальные надписи ©   (2004-08-17 11:38) [7]


> tgrey   (17.08.04 01:46) [4]

Организуй цикл, что-то типа этого

b:=1; res:=0;
while символ<>" " do begin
 читаем_символ;
 if символ<>"." then begin
   res:=res+chartoint(символ)/b;
   b:=b*10;  
 end;
end;

До запятой только одна цифра, но можно обуниверсалить.
Chartoint можно через case.
Лучше, чтобы символы через пробел шли,
 тогда можно read(f,символ).
О скорости тут говорить нечего, конечно...
Спроси лучше знатоков Assembler в таком случае.


 
Vovchik_A ©   (2004-08-17 12:49) [8]

2tgrey  

Читай, что тебе говорят умные люди.
Например, Рамиль ©   (17.08.04 08:27) [6]


 
tgrey   (2004-08-17 17:24) [9]

Посмотрите выполнение этого кода в отладчике

var s:String;
   sr:extended;
begin
 s:="-0,29805999272503";
 sr:=StrToFloat(s);
end;

sr после преобразования не будет равно s, оно будет равно -0.29805999273


 
Алхимик ©   (2004-08-17 19:02) [10]

Fundamental real types
Type     Range                          Significant digits Size in bytes
Real48  2.9x10^-39 .. 1.7 x 10^38      11-12              6
Single  1.5x10^-45 .. 3.4 x 10^38      7-8            4
Double  5.0x10^-324 .. 1.7 x 10^308    15-16            8
Extended 3.6x10^-4951 .. 1.1 x 10^4932  19-20            10
Comp -2^63+1..2^63 -1                19-20            8
Currency  -922337203685477.5808..
          922337203685477.5807         19-20              8



Significant digits - значащие разрады, которые грубо говоря отражают точность числа.
Говорить об отмене точности в фундаментальных дробных типах не корректно.
:)


 
default ©   (2004-08-17 19:29) [11]

procedure TForm1.Button1Click(Sender: TObject);
var
 s:String;
 sr:extended;
begin
 s:="-0,29805999272503";
 sr := StrToFloat(s);
 asm
   FLD  sr
 end;
 // Caption := FloatToStr(sr)
end;
открой окно CPU после FLD и посмотри...обманывать нехорошо


 
default ©   (2004-08-17 19:29) [12]

FPU вернее


 
tgrey   (2004-08-17 22:32) [13]

[default]
даже не думал никого обманывать, я смотрел значение sr через окно Watch List, а там оно выглядит вот так -0.29805999273, а в FPU выглядит так как надо, и если его обратно в текст перевисти тоже выглядит как надо, если кто то не верит могу скриншот отправить на мыло



Страницы: 1 вся ветка

Текущий архив: 2004.09.05;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.046 c
1-1092860381
nester
2004-08-19 00:19
2004.09.05
Что делать с локальными типизироваными константами в Делфи 7


1-1092748837
wicked
2004-08-17 17:20
2004.09.05
компоненты c++builder в delphi....


8-1087123247
Barnaul
2004-06-13 14:40
2004.09.05
Вопрос по поводу Canvas a


3-1092090948
Dub
2004-08-10 02:35
2004.09.05
Фокусировка по полям


1-1093168480
Jiurasrasr
2004-08-22 13:54
2004.09.05
Как обеспечить чтобы окно было повнрх всех!