Возможно ли получить "точное" значение? - страница 2 1234567 Новый комментарий Alexandr Bryzgalov 2014.10.04 09:34 #11 а вот такое значение 0.099999999вернёт 0.1) Alexandr Bryzgalov 2014.10.04 09:44 #12 тогда то что выше приводили правильней будет под задачу ТС:void OnStart() { //--- int DIGITS=2; string stroka=DoubleToString(0.099999999,8); int P=StringFind(stroka,"."); Print(stroka); stroka=StringSubstr(stroka,0,P+DIGITS+1); Print(StringToDouble(stroka)); Print(NL(DIGITS,0.099999999)); } //+------------------------------------------------------------------+ double NL (int DIGITS,double value) { double step=1/MathPow(10,DIGITS); return (MathFloor(value/step)*step); }возвращает:2014.10.04 11:42:31.856 normalize EURUSD,H4: 0.09 2014.10.04 11:42:31.856 normalize EURUSD,H4: 0.1 2014.10.04 11:42:31.856 normalize EURUSD,H4: 0.10000000 [Удален] 2014.10.04 09:48 #13 Набросал функцию, делающая именно то, что нужно: точно обрезает в отличи от DoubleToStr строку до указанной точности:string Normalize (string Normalize_Parse, int Normalize_Number, string Normalize_Separator = ".") { string Normalize_Before, Normalize_After; for (int i = 0; i <= StringLen (Normalize_Parse) - 1; i ++) { if (StringSubstr (Normalize_Parse, i, StringLen (Normalize_Separator)) == Normalize_Separator) { for (int ii = i + StringLen (Normalize_Separator); ii < i + StringLen (Normalize_Separator) + Normalize_Number; ii ++) { Normalize_After += StringSubstr (Normalize_Parse, ii, 1); } break; } Normalize_Before += StringSubstr (Normalize_Parse, i, 1); } return (Normalize_Before + (Normalize_After > 0 ? Normalize_Separator + Normalize_After : "")); }Результат для "0.09864724":Comment (Normalize (0.09864724, 2)); // 0.09Результат для "0,-843158":Comment (Normalize ("0,-843158", 3, ",-")); // 0,-843Операции с double и подобным:Comment ((double) Normalize (0.09, 2) * 5); // 0.45Я прохо искал и такая функция уже есть в MQL4 (5?). Если ее нет, то почему бы ее не добавить уже давно? :) [ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой Пиши и зарабатывай на Любые вопросы новичков по Alexandr Bryzgalov 2014.10.04 09:53 #14 WePlexus: Набросал функцию, делающая именно то, что нужно: точно обрезает в отличи от DoubleToStr строку до указанной точности:Результат для "0.09864724":Результат для "0,-843158":Операции с double и подобным:Я прохо искал и такая функция уже есть в MQL4 (5?). Если ее нет, то почему бы ее не добавить уже давно? :)вот это я понимаю, "проще" ) Andrey F. Zelinsky 2014.10.04 09:55 #15 WePlexus: Набросал функцию, делающая именно то, что нужно: точно обрезает в отличи от DoubleToStr строку до указанной точности:Результат для "0.09864724":Результат для "0,-843158":Операции с double и подобным:Я прохо искал и такая функция уже есть в MQL4 (5?). Если ее нет, то почему бы ее не добавить уже давно? :)вы оперируете с не совсем характерными примерами -- поэтому не може делать вывод, что ваша функция работает верно.возьмите такой пример:как от числа =0.01999999999999999999 -- оставить =0.01 Alexandr Bryzgalov 2014.10.04 09:56 #16 abolk: вы оперируете с не совсем характерными примерами -- поэтому не може делать вывод, что ваша функция работает верно.возьмите такой пример:как от числа =0.01999999999999999999 -- оставить =0.01проверил последнюю функцию, оставляет 0.01 Petros Shatakhtsyan 2014.10.04 10:00 #17 Я так и не понял, что вы хотите.Если хотите на графике вместо 0.098 увидеть 0.09, то сделайте так! int a=0.098 * 100; double d=a/100.0;Comment(StringFormat( "%G", d )); Andrey F. Zelinsky 2014.10.04 10:03 #18 sanyooooook: проверил последнюю функцию, оставляет 0.01проверил твою функцию -- оставляет 0.02 [Удален] 2014.10.04 10:08 #19 abolk: проверил твою функцию -- оставляет 0.02Действительно, 0.02.Моя функция, может и громозднее, но обрезает именно 0.01. [Удален] 2014.10.04 10:08 #20 sanyooooook: проверил последнюю функцию, оставляет 0.01Как можно твою функцию оптимизировать, чтобы брало 0.01 из примера abolk? 1234567 Новый комментарий
а вот такое значение
0.099999999
вернёт 0.1
)
тогда то что выше приводили правильней будет под задачу ТС:
возвращает:
Набросал функцию, делающая именно то, что нужно: точно обрезает в отличи от DoubleToStr строку до указанной точности:
Результат для "0.09864724":
Результат для "0,-843158":
Операции с double и подобным:
Я прохо искал и такая функция уже есть в MQL4 (5?). Если ее нет, то почему бы ее не добавить уже давно? :)
Набросал функцию, делающая именно то, что нужно: точно обрезает в отличи от DoubleToStr строку до указанной точности:
Результат для "0.09864724":
Результат для "0,-843158":
Операции с double и подобным:
Я прохо искал и такая функция уже есть в MQL4 (5?). Если ее нет, то почему бы ее не добавить уже давно? :)
Набросал функцию, делающая именно то, что нужно: точно обрезает в отличи от DoubleToStr строку до указанной точности:
Результат для "0.09864724":
Результат для "0,-843158":
Операции с double и подобным:
Я прохо искал и такая функция уже есть в MQL4 (5?). Если ее нет, то почему бы ее не добавить уже давно? :)
возьмите такой пример:
как от числа =0.01999999999999999999 -- оставить =0.01
вы оперируете с не совсем характерными примерами -- поэтому не може делать вывод, что ваша функция работает верно.
возьмите такой пример:
как от числа =0.01999999999999999999 -- оставить =0.01
Я так и не понял, что вы хотите.
Если хотите на графике вместо 0.098 увидеть 0.09, то сделайте так!
int a=0.098 * 100;
double d=a/100.0;
Comment(StringFormat( "%G", d ));
проверил последнюю функцию, оставляет 0.01
проверил твою функцию -- оставляет 0.02
Действительно, 0.02.
Моя функция, может и громозднее, но обрезает именно 0.01.
проверил последнюю функцию, оставляет 0.01