По теме из базы знаний
- Как работают управляемые формы и тонкий клиент 1С – взгляд "из-под капота"
- Разработка гибридного web-приложения на 1С, возможности и ограничения
- Где деньги, Зин? Или как загрузить информацию из банка, если у вас 200 000 операций в день?
- Как менеджеру прогнозировать сроки выполнения задачи с вероятностью 80-90%?
- Внутренняя жизнь ваших запросов PostgreSQL. Как и зачем «подглядывать» в подробности
Найденные решения
Как вариант попробуйте воспользоваться описание получения обыкновенной дроби из десятичной:
https://www.berdov.com/docs/fraction/kak-perevesti-desyatichnuyu-drob-v-obiknovennuyu/
Набросал код процедуры для перевода:
Набросал код процедуры для перевода:
Процедура ПолучитьДробнуюФорму(Команда)
ЦелаяЧасть = Цел(Объект.ИсходноеЧисло);
ЗнакиПослеЗапятой = Объект.ИсходноеЧисло - ЦелаяЧасть;
КоличествоЗнаковПослеЗапятой = СтрДлина(Сред(Строка(ЗнакиПослеЗапятой),СтрНайти(Строка(ЗнакиПослеЗапятой), ",") + 1));
КоэффициентПриведения = Pow(10,КоличествоЗнаковПослеЗапятой);
Числитель = ЗнакиПослеЗапятой * КоэффициентПриведения;
Знаменатель = КоэффициентПриведения;
НайденНОД = Ложь;
Для Счетчик = 1 По КоэффициентПриведения Цикл
НОД = КоэффициентПриведения + 1 - Счетчик;
Если (Числитель % НОД = 0) И (Знаменатель % НОД = 0) Тогда
НайденНОД = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если НайденНОД Тогда
ДробноеПредставление = СтрШаблон("%1/%2", СтрЗаменить(Числитель / НОД, Символы.НПП, ""), СтрЗаменить(Знаменатель / НОД, Символы.НПП, ""));
Сообщить(ДробноеПредставление);
Иначе
Сообщить("Дробное представление не получено");
КонецЕсли;
КонецПроцедуры
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)вот такая функция получается
результат = "1/5.88"
Значение = 0.17;
Функция ПолучитьДробь(Значение)
//точность до 100
лкБаза = 1/Значение;
Если лкБаза <> Цел(лкБаза) Тогда
лкБаза = Цел(лкБаза * 100)/100; //можно формат использовать
КонецЕсли;
Возврат "1/" + лкБаза;
КонецФункции
Показатьрезультат = "1/5.88"
По-моему, нет и быть не может, т.к. число с плавающей точкой не всегда можно однозначно привести к простой дроби, например, 0.33333..., читайте про бесконечные десятичные дроби, которые записываются как-то так: 1.(3), где (3) означает "три в периоде".
Как вариант попробуйте воспользоваться описание получения обыкновенной дроби из десятичной:
https://www.berdov.com/docs/fraction/kak-perevesti-desyatichnuyu-drob-v-obiknovennuyu/
Набросал код процедуры для перевода:
Набросал код процедуры для перевода:
Процедура ПолучитьДробнуюФорму(Команда)
ЦелаяЧасть = Цел(Объект.ИсходноеЧисло);
ЗнакиПослеЗапятой = Объект.ИсходноеЧисло - ЦелаяЧасть;
КоличествоЗнаковПослеЗапятой = СтрДлина(Сред(Строка(ЗнакиПослеЗапятой),СтрНайти(Строка(ЗнакиПослеЗапятой), ",") + 1));
КоэффициентПриведения = Pow(10,КоличествоЗнаковПослеЗапятой);
Числитель = ЗнакиПослеЗапятой * КоэффициентПриведения;
Знаменатель = КоэффициентПриведения;
НайденНОД = Ложь;
Для Счетчик = 1 По КоэффициентПриведения Цикл
НОД = КоэффициентПриведения + 1 - Счетчик;
Если (Числитель % НОД = 0) И (Знаменатель % НОД = 0) Тогда
НайденНОД = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если НайденНОД Тогда
ДробноеПредставление = СтрШаблон("%1/%2", СтрЗаменить(Числитель / НОД, Символы.НПП, ""), СтрЗаменить(Знаменатель / НОД, Символы.НПП, ""));
Сообщить(ДробноеПредставление);
Иначе
Сообщить("Дробное представление не получено");
КонецЕсли;
КонецПроцедуры
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот