Обращение десятичной дроби в обыкновенную #153577


#0 by Lyolik
Как это сделать на языке 1С.
#1 by acsent
0.1234 = 1234/10000
#2 by Lyolik
нужно этк дробь сократить и привести к виду 10/81.
#3 by Lyolik
может кто подскажет как дробь сократить?
#4 by Бешенная Нога
ели дробь вида 1/151  ты ее никогда не приведешь к виду х/81, чтобы х - было целое число
#5 by Широкий
в цикле по значениям от 0 до 9 перебирай - смотришь имеет ли числитель и знаменатель общие делители - есть сокращает - снова цикл ... и т.д приведешь  дробь 1234/1000 к другому виду
#6 by airyashov
НОД и НОК ищи алгоритм стандартный
#7 by Mort
Десятичная дробь значит что в знаменатель всегда кратен только простым 2 и 5. Пока числитель делится на 2 или 5 дели. Когда не будет делится считай нашёл.
#8 by Широкий
3/9
#9 by Simod
+ или алгоритм Эвклида.
#10 by Mort
Ага. Преобразуй 3/9 в десятичную дробью.
#11 by sb_sash
какой в цикле от 0 до 9?! в цикле от 1 до ЦелаяЧасть(числитель/2)
#12 by NS
Если сократить дробь, то а/б = (а / НОД(а,б)) / (в / НОД(а,б)) // Но есть еще способы приближенного сокращения дроби с данной точностью.
#13 by Simod
Порылся у себя. Алгоритм Эвклида:
#14 by NS
Чтоб изначально привести число к виду а/б а=начЧисло; б=1;
#15 by evGenius
дело сказал! У знаменателя делители только 2 и 5. Зачем перебирать все?
#16 by Широкий
Признаю... проще смотреть делители 2 и 5
#17 by NS
Их вообще перебирать не надо.
#18 by Mort
Вот итог: КонецЦикла
#19 by Mort
Не увидел тож катит
#20 by evGenius
Дольше.
#21 by evGenius
+ Да еще и рекурсия...
#22 by NS
Проверял? Рекурсия леко убирается... Пока б>0 цикл  с=б;
#23 by NS
(+22) По завершении цикла в "а" будет результат.
#28 by Lyolik
Большое спасибо за мысли. Хочу уточнить условие. Есть дробь 1/6 преобразуем в десятичную = 0,1666666666666... ее опять нужно преобразовать в 1/6 а не в 833/5000.
#29 by NS
Это уже алгоритмы приближенного преобразования... Сейчас попробую вспомнить - что-то сомения у меня возникают, что в инете это есть...
#30 by NS
Вспомнил...
#31 by Lyolik
и ...
#32 by NS
Представляем в виде дроби - 1/(Х1+1/(Х2+1/(Х3+...)) Сейчас забацаю.
#33 by miki
Вот еще был вариант, через приближения. Код не претендует на оптимальность. ПисАлось по просьбе чела "очень срочно" за время в одну банку пива. Сначала были мысли доработать, но всё некогда. Находит ближайшую дробь с двухзначным знаменателем (кому надо больше - замените 99 на 99скольконадораз, можно переделать, чтобы max кол-во разрядов знаменателя передавать как параметр). //***********************************    For _Знам=2 To 99 Do        For _Числ=1 To (_Знам-1) Do            Вариант=_Числ/_Знам;            If Вариант>ДесЧасть Then            If Eps1<Eps Then
#34 by lisss
отрицательные числа работают неправильно.... впрочем как и в ....
#35 by miki
Млять..., ну дык возьми модуль, потом минус дорисуй...
#36 by lisss
я проще сделал :) см 27....
#37 by lisss
+ и работает быстрее....
#38 by miki
Возвращает только неправильные дроби, т. е. не выделяет целую часть. Чётных знаменателей не будет. => точность может быть ниже, чем в . Согласен полностью.
#39 by Lyolik
Метод вроде нормально делает то что надо.
#41 by miki
+ т.е. "НЕЧётных знаменателей не будет", сорри.
#43 by miki
Теряешь целую часть. Для числа нач=3.14159265; Вариант возвращает 314159/100000 Вариант возвращает 3 16/113
#44 by NS
Ничего я не теряю. Я показываю как преобразовать дробную часть. Напиши Сообщить(""+цел(нач)+" "+... а тут что было написано...);
#46 by lisss
целую часть выделять не просили.... "Чётных знаменателей не будет. => точность может быть ниже, чем в ." ЭТО ТЫ ОТКУДА ВЗЯЛ????
#47 by NS
Расслаютесь. В "Правильный" алгоритм, которому уже несоклько веков. Читал в библиотечке "Квант" (вроде, хотя еще брошурки таки тонкие были, не помню как назывались, может в них) ЗЫ. Во у меня пямять! ;-))
#48 by NS
(+47) Читал, когда еще в школе учился... Лет 20!!! Назад.
#49 by lisss
вы уже решаете как сократить любую дробь.... вначале было десятичную....
#50 by Бешенная Нога
50/50
#51 by NS
Вначале - смотри (1,2) Видишь 10/81? Это не сокращение десятичной дроби, а представление иррационального числа в виде десятичной дроби (приближения) - в общем случае.
#52 by conv
Взяли на двоих пол-литры . Скока раз разольём её по 100 грамм ?
#54 by Lyolik
NS большое спасибо, проверяю на базе клиента. А ограничение 100 или 1000 выставлю в константе. Практика покажет как лучше.
#55 by NS
Еще на дельту - относительное отклонение можно ограничение ставить.
#56 by Lyolik
непонял :(
#57 by NS
Но в принципе это не нужно, так как при маленькой дельте на следующем шаге и числитель и знаменатель вырастут в очень много раз.
Тэги: Математика и алгоритмы
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С