1 Востаннє редагувалося Sensetivity (28.03.2015 17:09:56)

Тема: Ділення числа в Делфі.

Опущу деталі і перейду одразу до справи.

var sms_count: Real;
var balance, xml, bb: String;
-------------------------------------------------------
bb := root.ChildNodes['balance'].Text;   // 6.36
sms_count:= (StrToFloat(bb) / 0.16);
-------------------------------------------------------
І хоч ти трісни
http://сайт-злодій/6759346.png

Той же код
sms_count:= (6,36 / 0.16);
Працює нормально.

То я дурний, чи лижі не їдуть? В чому проблема?

2

Re: Ділення числа в Делфі.

Ліричний відступ
http://docs.embarcadero.com/products/ra … ended.html
Отака штука без exception (його виводу) працює, якщо щось не сподобалось - закидує дефолтне значення

Тепер до справи, може у Вас там якийсь пробіл попадає в ChildNodes['balance'].Text або щось з юнікодом проблеми і в такому дусі?

3 Востаннє редагувалося Sensetivity (28.03.2015 17:52:56)

Re: Ділення числа в Делфі.

Chemist-i написав:

Ліричний відступ
http://docs.embarcadero.com/products/ra … ended.html
Отака штука без exception (його виводу) працює, якщо щось не сподобалось - закидує дефолтне значення

Тепер до справи, може у Вас там якийсь пробіл попадає в ChildNodes['balance'].Text або щось з юнікодом проблеми і в такому дусі?

Звичайнісінький XML

<?xml version="1.0" encoding="utf-8"?>
<message>
    <balance>6.36</balance>
</message>
begin
  stringstream:=TStringStream.Create('');
  try
    xml := '<?xml version="1.0" encoding="utf-8"?><request><operation>GETBALANCE</operation></request>';
    stringstream.WriteString(xml);
    IdHTTP1.Request.ContentType:='application/x-www-form-urlencoded';
    IdHTTP1.Request.ContentLength:=stringstream.Size;
    stringstream.Position:=0;
    balance:=IdHTTP1.Post(apiurl, stringstream);
    finally
      stringstream.Free;
    end;

    XMLDocument2.LoadFromXML(balance); // Çàâàíòàæóºìî ôàéë ç áàëàíñîì.
    XMLDocument2.Active := true;
    root := XMLDocument2.DocumentElement;
    bb := trim(root.ChildNodes['balance'].Text);

4 Востаннє редагувалося Sensetivity (28.03.2015 18:15:27)

Re: Ділення числа в Делфі.

Розібрався.
Убив годину на операцію ділення.
Проблема була в '.'
Хоча якщо записати текстом "6.36" то все працювало. Але менше з тим.
Відповідь знайшов тут: http://stackoverflow.com/questions/5851 … ges-locals

Правда переписав отак:

function StrToFloat_UK(const AStr: string): Real;
var
  FS: TFormatSettings;
begin
  FS.DecimalSeparator:= '.';
  Result:= StrToFloat(AStr, FS);
end;
Подякували: koala, Chemist-i2