0,5 отобразить как 1/2

1. 1c_ssnik 28.07.22 08:40 Сейчас в теме
Добрый день.
Есть ли функция бсп которая отображает дробное число не в десятичном виде, а в виде строки через "/" ?
Пример:
0.5 как 1/2
0.25 как 1/4 и т.д.
По теме из базы знаний
Найденные решения
6. Zevzm 28.07.22 11:18 Сейчас в теме
Как вариант попробуйте воспользоваться описание получения обыкновенной дроби из десятичной:
https://www.berdov.com/docs/fraction/kak-perevesti-desyatichnuyu-drob-v-obiknovennuyu/

Набросал код процедуры для перевода:

Процедура ПолучитьДробнуюФорму(Команда)   
	
	ЦелаяЧасть = Цел(Объект.ИсходноеЧисло);
	
	ЗнакиПослеЗапятой = Объект.ИсходноеЧисло - ЦелаяЧасть;
	
	КоличествоЗнаковПослеЗапятой = СтрДлина(Сред(Строка(ЗнакиПослеЗапятой),СтрНайти(Строка(ЗнакиПослеЗапятой), ",") + 1));
	
	КоэффициентПриведения = Pow(10,КоличествоЗнаковПослеЗапятой); 
	
	Числитель = ЗнакиПослеЗапятой * КоэффициентПриведения;
	
	Знаменатель = КоэффициентПриведения;
	
	НайденНОД = Ложь; 
		
	Для Счетчик = 1 По КоэффициентПриведения Цикл
		
		НОД = КоэффициентПриведения + 1 - Счетчик;
		
		Если (Числитель % НОД = 0) И (Знаменатель % НОД = 0) Тогда
			
			НайденНОД = Истина;
			
			Прервать;
					
		КонецЕсли;	
	
	КонецЦикла; 
	
	Если НайденНОД Тогда
		
		ДробноеПредставление = СтрШаблон("%1/%2", СтрЗаменить(Числитель / НОД, Символы.НПП, ""), СтрЗаменить(Знаменатель / НОД, Символы.НПП, ""));
		
		Сообщить(ДробноеПредставление);	
		
	Иначе
		
		Сообщить("Дробное представление не получено");
		
	КонецЕсли;
	
КонецПроцедуры
Показать
1c_ssnik; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. ishelper 28.07.22 10:00 Сейчас в теме
(1)
Есть ли функция бсп которая отображает дробное число не в десятичном виде, а в виде строки через "/" ?
Уверен, что нет.

Намного интереснее - а вы сами, без БСП, способны написать такую функцию? ;-)
4. lmnlmn 69 28.07.22 10:46 Сейчас в теме
(1) Не встречал, но написать самостоятельно такую функцию весьма хорошая задача для взбадривания мозгов, балго что алгоритм несложный для непериодических дробей.
5. DesertPunk 28.07.22 11:16 Сейчас в теме
(1)Тут скорее нужен фиксированный список значений. Условно говоря, когда можно выбрать половину дюжины, треть дюжины или четверть дюжины.
14. soft_wind 28.07.22 11:44 Сейчас в теме
(1)вот такая функция получается

Значение = 0.17;

Функция ПолучитьДробь(Значение)
	//точность до 100
	лкБаза = 1/Значение;
	Если лкБаза <> Цел(лкБаза) Тогда
		лкБаза = Цел(лкБаза * 100)/100; //можно формат использовать
	КонецЕсли; 
	
	Возврат "1/" + лкБаза;

КонецФункции 
Показать


результат = "1/5.88"
23. lmnlmn 69 28.07.22 12:32 Сейчас в теме
(14) С переводом дробей затея несколько посложнее выходит.
18. THEBESTolo4b 10 28.07.22 12:05 Сейчас в теме
(1) представляю сидит бухгалтер, формирует оборотку по 60, а ему отчет выдает
Дт 2/6 Кт 1/85
это будет шедевр
1c_ssnik; +1 Ответить
2. booksfill 28.07.22 09:44 Сейчас в теме
По-моему, нет и быть не может, т.к. число с плавающей точкой не всегда можно однозначно привести к простой дроби, например, 0.33333..., читайте про бесконечные десятичные дроби, которые записываются как-то так: 1.(3), где (3) означает "три в периоде".
6. Zevzm 28.07.22 11:18 Сейчас в теме
Как вариант попробуйте воспользоваться описание получения обыкновенной дроби из десятичной:
https://www.berdov.com/docs/fraction/kak-perevesti-desyatichnuyu-drob-v-obiknovennuyu/

Набросал код процедуры для перевода:

Процедура ПолучитьДробнуюФорму(Команда)   
	
	ЦелаяЧасть = Цел(Объект.ИсходноеЧисло);
	
	ЗнакиПослеЗапятой = Объект.ИсходноеЧисло - ЦелаяЧасть;
	
	КоличествоЗнаковПослеЗапятой = СтрДлина(Сред(Строка(ЗнакиПослеЗапятой),СтрНайти(Строка(ЗнакиПослеЗапятой), ",") + 1));
	
	КоэффициентПриведения = Pow(10,КоличествоЗнаковПослеЗапятой); 
	
	Числитель = ЗнакиПослеЗапятой * КоэффициентПриведения;
	
	Знаменатель = КоэффициентПриведения;
	
	НайденНОД = Ложь; 
		
	Для Счетчик = 1 По КоэффициентПриведения Цикл
		
		НОД = КоэффициентПриведения + 1 - Счетчик;
		
		Если (Числитель % НОД = 0) И (Знаменатель % НОД = 0) Тогда
			
			НайденНОД = Истина;
			
			Прервать;
					
		КонецЕсли;	
	
	КонецЦикла; 
	
	Если НайденНОД Тогда
		
		ДробноеПредставление = СтрШаблон("%1/%2", СтрЗаменить(Числитель / НОД, Символы.НПП, ""), СтрЗаменить(Знаменатель / НОД, Символы.НПП, ""));
		
		Сообщить(ДробноеПредставление);	
		
	Иначе
		
		Сообщить("Дробное представление не получено");
		
	КонецЕсли;
	
КонецПроцедуры
Показать
1c_ssnik; +1 Ответить
10. Zevzm 28.07.22 11:27 Сейчас в теме
(6)Забыл добавить целую часть, если у вас значения с целой частью - добавьте ее обратно в дробном представлении.
12. lmnlmn 69 28.07.22 11:35 Сейчас в теме
(6) Хорошая затея, если после запятой немного разрядов и общий делитель найдется быстро.
13. Zevzm 28.07.22 11:38 Сейчас в теме
(12) Надеюсь у автора типовая конфигурация и он работает с типом Число(15,2) или подобным.
15. lmnlmn 69 28.07.22 11:49 Сейчас в теме
(13) Надеюсь что нет и придется вспоминать признаки делимости натуральных чисел а так же простые числа))

P.S. Хотя в знаменателе число которое делиться только на 2 и 5, что весьма упрощает дело.
7. soft_wind 28.07.22 11:23 Сейчас в теме
(1) а 0.17 в дробях это как будет?
8. lmnlmn 69 28.07.22 11:24 Сейчас в теме
9. soft_wind 28.07.22 11:25 Сейчас в теме
(8) логично, но не похоже на 1/...
11. lmnlmn 69 28.07.22 11:27 Сейчас в теме
(9) Арифметика точна и беспощадна. Что тут поделаешь?))
16. ryutao 50 28.07.22 11:54 Сейчас в теме
(9) 17/100 вполне себе дробь.
1c_ssnik; +1 Ответить
17. soft_wind 28.07.22 12:00 Сейчас в теме
19. lmnlmn 69 28.07.22 12:10 Сейчас в теме
(17) Формально в "техзадании" автор речь про правильные дроби прямым текстом, конечно, не вел. Но что-то подсказывает что под формулировкой
виде строки через "/"
скрывается именно она, а там так нельзя делать.
1c_ssnik; +1 Ответить
21. spacecraft 28.07.22 12:22 Сейчас в теме
(17) дроби бываю обыкновенными или десятичными. А тут какой-то монстр получился обыкновеннодесятичный :)
1c_ssnik; +1 Ответить
20. soft_wind 28.07.22 12:20 Сейчас в теме
(19) так для таких значений, функция вернет "правильную" дробь

0.2 1/5
0.25 1/4
0.5 1/2
0.1 1/10
22. lmnlmn 69 28.07.22 12:30 Сейчас в теме
(20) Под термином "правильные" вы подразумеваете математический термин или какое-то собственное представление об обыкновенных дробях? К чему тут кавычки?

P.S. 17/100, 3/8 11/123 это тоже все правильные дроби.
24. soft_wind 28.07.22 12:40 Сейчас в теме
(22) да, вы правы, это у меня опечатка была
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот