Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
ну и что. Мы говорим о разных вещах. Приведённая мною функция считает количество знаков после запятой, а не кратность одного числа другому.
Ваша функция правильно работает только со значениями типа 0.1, 0.01 и т.д. Такой результат можно получить без цикла, через логарифм.
Задача определить число знаком после запятой у любого числа.
Ваша функция правильно работает только со значениями типа 0.1, 0.01 и т.д. Такой результат можно получить без цикла, через логарифм.
Задача определить число знаком после запятой у любого числа.
Заинтриговал прям. Пойду проверю.
функция не моя, не проверял :)
int foo(float f, int level = 0) { if (level > FLT_DIG) { return FLT_DIG; } if (f < 0) { return foo(-f); } if (f < 1) { return foo(f + 1); } f -= round(f); if (fabs(f) <= FLT_EPSILON) { return level; } return foo(f * 10, level + 1);}
функция не моя, не проверял :)
}
Ну ничего себе, вот это завернуто.
знак числа - учитывается
максимальное кол-во знаков - учитывается
эпсилон - учитывается
должна работать ?
знак числа - учитывается
максимальное кол-во знаков - учитывается
эпсилон - учитывается
должна работать ?
Ваша функция правильно работает только со значениями типа 0.1, 0.01 и т.д. Такой результат можно получить без цикла, через логарифм.
Задача определить число знаком после запятой у любого числа.
Пойду думать как сделать функцию для любого числа.
В Code Base у меня есть вариант функции, определяющей количество десятичных знаков после запятой (количество знаков в дробной части).
При необходимости можно и на её основе что-то делать.
А это набросала сейчас пример из "на коленке" (функция из Code Base взята "как есть"):
Записи в журнале "Эксперты":
И вот ещё один вариант.
Не долго проверялось, но вроде работает.
Dmitry Fedoseev:
Должна, но не работает. Отдаю 0.1, получаю 0.
Функция написана на С
На mql5 действительно выдает 0.
А на C# выдает 1.
Может mql кривой?
using System; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace test { [TestClass] public class TstDeg{ const int DBL_DIG = 16; const double DBL_EPSILON = Double.Epsilon; [TestMethod] public void TestMethod1() { double a = 0.1; int deg = foo(a); } int foo(double f, int level = 0) { if (level > DBL_DIG) { return DBL_DIG; } if (f < 0) { return foo(-f); } if (f < 1) { return foo(f + 1); } f -= Math.Round(f); if (Math.Abs(f) <= DBL_EPSILON) { return level; } return foo(f * 10, level + 1); } } }