Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.09.05;
Скачать: [xml.tar.bz2];

Вниз

преобразование 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.033 c
14-1092697349
Leaner
2004-08-17 03:02
2004.09.05
А есть в Питере компьютерные клубы, где собираються Delphi-сты ?


1-1093108838
Navi1982
2004-08-21 21:20
2004.09.05
Cos(x) и Sin(x) -- в чём дело?


1-1093007891
iBitmap
2004-08-20 17:18
2004.09.05
cm_mouseleave при MouseDown


14-1092621406
Думкин
2004-08-16 05:56
2004.09.05
С днем рождения! 16 августа


3-1092049604
Guma
2004-08-09 15:06
2004.09.05
Помогите с запросом в SQL Server-е





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский