Главная страница
    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-1092585739
Юрий Зотов
2004-08-15 20:02
2004.09.05
И снова о том, как полезно владеть литературной речью


14-1091465217
Мазут Береговой
2004-08-02 20:46
2004.09.05
Я весь на измене. Даже спать перестал.


1-1092990871
Zhekson
2004-08-20 12:34
2004.09.05
нажатие клавиши


4-1090500778
юзверь
2004-07-22 16:52
2004.09.05
Как запустить процедуру, зная ее адрес??


3-1092045143
eLVik
2004-08-09 13:52
2004.09.05
Подстановка в конструкторе Access





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский