Не работает StrToDouble

 

Подскажите пожалуйста в чем ошибка? Облазил форум, доки уже несколько дней не могу решить этот вопрос.

Есть функция, которая рисует линию:

void PutHLine(string name,double price)
  {
   ObjectsDeleteAll(0,OBJ_HLINE);
   ObjectCreate(0,name,OBJ_HLINE,0,0,price);
   ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
   ObjectSetInteger(0,name,OBJPROP_STYLE,STYLE_SOLID);
   ObjectSetInteger(0,name,OBJPROP_WIDTH,2);
  }

 Функция, читающая строку с ценой из файла:

   string pr;

   int h=FileOpen("Files\\log.txt",FILE_READ|FILE_TXT);

   if(h!=-1)
     {
      pr=FileReadString(h,7);
      //--- закроем файл
      FileClose(h);
     }

 Линию рисую таким образом:

  PutHLine("Price "+pr,NormalizeDouble(StrToDouble(pr),Digits));


В результате линия рисуется на уровне 1.0000.

Цена считывается правильно, в имени линии выводит: Price 1.13073. 

В Comment выводится также правильное значение. StringToDouble дает тот же результат. Без нормализации все тоже.

Таким образом выводит линию правильно: 

PutHLine("Price " + pr, 1.13073);

 

Не пойму в чем дело, где искать ошибку?


 

Попробуйте так:

PutHLine("Price "+pr,StrToDouble(pr));

 если не ошибаюсь! Подправил, просто нормализовать зачем?

 
borilunad:

Попробуйте так:

 если не ошибаюсь! Подправил, просто нормализовать зачем?

Я так делал, все равно на единицу ставит.
 

Чему равняются price и Digits?

Распечатайте все параметры перед конвертацией.

Hint: У нас уже давно появилась отладка в MetaEditor.

 
stringo:

Чему равняются price и Digits?

Распечатайте все параметры перед конвертацией.

Hint: У нас уже давно появилась отладка в MetaEditor.

Вот параметры в отладчике:

 

 
AM2:

Вот параметры в отладчике:

 

А результат DoubleToString? (Не StringToDouble!!!)
 
stringo:
А результат DoubleToString? (Не StringToDouble!!!)
Кстати да. Причём тут StrToDouble?
 
AM2:

Вот параметры в отладчике:

 

Значение pr у Вас равно буквально: "1,13073". Конвертация этого значения в double через StrToDouble приведет к числу 1. Это естественно, т. к. символ "," является нековертируемым. Чтобы получить double, нужно в pr записать "1.13073"
 
stringo:
Кстати да. Причём тут StrToDouble?
Слава, Вы заработались )) pr - строковая переменная.
 
Scriptong:
Слава, Вы заработались )) pr - строковая переменная.

Да. Спасибо.

Запятая является разделителем значений. Для разделения целой и дробной части в символьном представлении числа используется точка. Она так и называется "десятичная точка"

 
Scriptong:
Значение pr у Вас равно буквально: "1,13073". Конвертация этого значения в double через StrToDouble приведет к числу 1. Это естественно, т. к. символ "," является нековертируемым. Чтобы получить double, нужно в pr записать "1.13073"

 

Всех благодарю за помощь. Сейчас все работает. Сделал так:

 

   int n=StringReplace(pr,",",".");
   PutHLine("Price "+pr,NormalizeDouble(StrToDouble(pr),Digits));
Причина обращения: