Можно ли преобразовать число типа double в строку, в которой вместо
стандартной точки будет запятая?
- Вопросы от "чайника"
- Преобразование типа
- Помогите исправить ошибку: 'sit' - some operator expected
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:
Сервис -> Параметры -> Международные -> !"Использовать системные разделители" -> "."
Или вообще поменять разделитель в Control Panel
lsv:
Надо, например, отчет сформировать под эксель и все, все числа с точками он дешифрует как даты.
Хотя логичнее эксел настроить под отчетНадо, например, отчет сформировать под эксель и все, все числа с точками он дешифрует как даты.
Сервис -> Параметры -> Международные -> !"Использовать системные разделители" -> "."
lsv:
Можно ли преобразовать число типа double в строку, в которой вместо стандартной точки будет запятая?
Да без проблем. Вот код работающего эксперта отображающий текущий
Bid в стандартном виде и ниже в виде числа с разделителем ",
" вместо "."Можно ли преобразовать число типа double в строку, в которой вместо стандартной точки будет запятая?
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); }А можно вот так!
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь