Работа с дробными числами в делфи

Тема в разделе "ASM, С/С++, Delphi, Java", создана пользователем Bicdibus, 20 мар 2012.

  1. Bicdibus

    Bicdibus

    Регистр.:
    5 мар 2010
    Сообщения:
    485
    Симпатии:
    7
    итак есть текстовій файл в котором хранятся числа (1.5 1.2 і т. д.) єти чсла должні считіватся и с ними проводится математические операции при считываю я их в переменную типа стринг, потом преобразую в чсло функцией strtofloat temp:=strtofloat(znak); temp имеет тип real но прога говорит "1.3 is not floating value". в чем загвоздка? каким образом ещоможно преобразовать стринг в дробное число?
     
  2. Forza.Baron

    Forza.Baron

    Регистр.:
    26 янв 2012
    Сообщения:
    175
    Симпатии:
    76
    сначала надо поменять . на , для всех строк
    цикл
    begin
    poz:=Pos('.',znak);
    Delete(znak,poz,1);
    Insert(',',znak,poz);
    temp:=strtofloat(znak);
    end;
     
  3. Bicdibus

    Bicdibus

    Регистр.:
    5 мар 2010
    Сообщения:
    485
    Симпатии:
    7
    блин там что кома вместо точки должна бить, а я парюсь епт.
     
  4. Forza.Baron

    Forza.Baron

    Регистр.:
    26 янв 2012
    Сообщения:
    175
    Симпатии:
    76
    Если 1.3 is not floating value тогда 1,3 точно floating value :)
     
  5. Jozef

    Jozef Писатель

    Регистр.:
    25 янв 2013
    Сообщения:
    3
    Симпатии:
    0
    Можно настроить
    Код:
    DecimalSeparator := '.';
    или
    Код:
    DecimalSeparator := ',';
     
  6. Андрей Шпак

    Андрей Шпак Создатель

    Регистр.:
    11 фев 2013
    Сообщения:
    43
    Симпатии:
    7
    только если менять, то не 5-ю строками, а AnsiReplace в StrUtils модуле есть
     
  7. p2rcoder

    p2rcoder Постоялец Нарушитель

    Регистр.:
    16 июл 2012
    Сообщения:
    120
    Симпатии:
    29
    temp := StrToFloat(StringReplace(znak, '.', DecimalSeparator, []));

    Для надежности можно так:
    s := StringReplace(znak, '.', DecimalSeparator, []);
    s := StringReplace(s, ',', DecimalSeparator, []);
    temp := StrToFloat(s);

    если вдруг на какой-нибудь машине окажется наоборот, в файле запятые, а в локали точка
     
  8. ProxyTube

    ProxyTube Создатель

    Регистр.:
    10 сен 2013
    Сообщения:
    14
    Симпатии:
    2
    StrToFloatDef - на случай ошибки конвертирования