Преобразование double в строку с символом ','

 
Можно ли преобразовать число типа double в строку, в которой вместо стандартной точки будет запятая?
 
string my_str = DoubleToStr(my_val, my_digits);
int str_len = StringLen(my_str);
for (int dot_pos=0; dot_pos<str_len; dot_pos++)
 {
   if (StringGetChar(my_str, dot_pos) == '.')     
   { 
      my_str =  StringSetChar(my_str, dot_pos, ','); 
      break; 
    }
 }



 
А по проще разве никак?
 
Наверное, нет. MQL4 не PERL с его макропоиском и макрозаменами.
 
В других языках обычно используется глобальная переменная, которая и хранит этот символ, странно, почему в этом языке ее не ввели. Надо, например, отчет сформировать под эксель и все, все числа с точками он дешифрует как даты.
 

Открываешь отчет в блокноте делаешь find/replace и заменяешь все точки на запятые.... :)

 
lsv:
Надо, например, отчет сформировать под эксель и все, все числа с точками он дешифрует как даты.
Хотя логичнее эксел настроить под отчет

Сервис -> Параметры -> Международные -> !"Использовать системные разделители" -> "."
 
Irtron:
lsv:
Надо, например, отчет сформировать под эксель и все, все числа с точками он дешифрует как даты.
Хотя логичнее эксел настроить под отчет

Сервис -> Параметры -> Международные -> !"Использовать системные разделители" -> "."
Или вообще поменять разделитель в Control Panel
 
lsv:
Можно ли преобразовать число типа double в строку, в которой вместо стандартной точки будет запятая?
Да без проблем. Вот код работающего эксперта отображающий текущий Bid в стандартном виде и ниже в виде числа с разделителем ", " вместо "."
int start()
  {
   string sSour=DoubleToStr(Bid,Digits);
// отсюда
   int iPos=StringFind(sSour,".");
   string sDest=StringSubstr(sSour,0,iPos)+","+StringSubstr(sSour,iPos+1);
// досюда
   Comment(sSour,"n",sDest);
   return(0);
  }
sSour - исходная строка с ".".
sDest - результирующая строка с ",".

Тебе собственно из него нужны 2 средние строки.
Естественно никаких дополнительных проверок я не делал, эксперт подразумевает что "." в исходной строке обязательно есть. Если надо - усложни. Функция StringFind вернет -1 если "." не найдет.
Но если уверен что точка стопудово в исходной строке есть, то можно и не усложнять (например если второй параметр в функции преобразования DoubleToStr больше нуля, то "." в результирующей строке будет).

P.S. А вообще-то сделай как у всех нормальных людей, переключи в настройках самой Винды разделитель на "." и будет у тебя везде и все нормально, и в МТ, и в Excel, в в других программах.
 
string StringCutAndPaste(string source, string cut, string paste)
   {
   int p=StringFind(source,cut,0);
   if (p==-1) return(source);
   return(StringSubstr(source,0,p)+paste+StringSubstr(source,p+StringLen(cut)));
   }
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
   double val=1365.876386;
   Print(StringCutAndPaste(val,".",","));
   return(0);
  }
А можно вот так!
Причина обращения: