Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.03.2018, 13:00   #1
tim8579
 
Регистрация: 23.03.2018
Сообщений: 8
По умолчанию Отобажение числовых данных в TextBox в виде обычных дробей

Может быть кто-нибудь подскажет, как в VBA excel отобразить формат числа в TextBox в виде дроби: например, 1/2, 1/3, 5/12 и т.д.

Код:

Private Sub UserForm_Initialize()
a = 0.2
b = 0.05
TextBox1 = a + b
End Sub

В указанном примере при запуске формы в TextBox будет отражено: 0.25. А мне нужно: 1/4.
tim8579 вне форума Ответить с цитированием
Старый 23.03.2018, 13:20   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от tim8579 Посмотреть сообщение
отобразить формат числа
нет такого формата числа.

можете сами вычислять по алгоритму:
Перевод десятичных дробей в обыкновенные дроби

могут возникнуть сложности с некоторыми иррациональными числами.
ну, например, допустим, что у Вас в переменной a находится 3, а в переменной b число 0,141592653589793238462643
Какую дробь нужно отобразить в TextBox ?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.03.2018, 13:39   #3
tim8579
 
Регистрация: 23.03.2018
Сообщений: 8
По умолчанию

Спасибо за ответ.

Предложенный Вам метод понятен. Но, к сожалению, он работает не всегда, как и Вы и отметили. Например, если в примере a=1/3 и b=1/3, то метод не сработает
tim8579 вне форума Ответить с цитированием
Старый 23.03.2018, 13:44   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Не обязательно 1/3. И 1/2 может быть такой, что не сработает, смотря как это число получено, вполне вместо ожидаемого 0.5 в переменной может быть 0.5000000000001 или 0.49999999999
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 23.03.2018, 13:53   #5
tim8579
 
Регистрация: 23.03.2018
Сообщений: 8
По умолчанию

Да, примеров может быть множество.

У меня идея следующая. Есть Multipage, в которой каждая страница- это данные о человеке, владеющего долей в уставном капитале.
При открытии каждой следующей страницы доля должна подставляться автоматически как разница между 1 и суммой долей, указанных в предыдущих страницах. Поскольку доли в уставном капитале указываются в дробях, то и подстановка должна быть в дробях. Оператор может изменить долю при необходимости, а может не менять.

Ломаю голову, как этого добиться. Неужели никак?
tim8579 вне форума Ответить с цитированием
Старый 23.03.2018, 13:54   #6
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Используйте функцию листа ТЕКСТ, например
Код:
?worksheetfunction.Text (0.25,"0/0")
1/4
?worksheetfunction.Text (worksheetfunction.Pi,"# #/###")
3 16/113
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 23.03.2018, 13:56   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Ну и храни отдельно числитель и знаменатель в целых числах. А дальше правила приведения к общему знаменателю
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 23.03.2018, 14:01   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Казанский, а точно. недооценил я EXCEL. Там же есть тип "дробный".


Цитата:
Сообщение от tim8579 Посмотреть сообщение
При открытии каждой следующей страницы доля должна подставляться автоматически как разница между 1 и суммой долей, указанных в предыдущих страницах.
Лучше всего написать вычисления в обыкновенных дробях, не переводя их в десятичный вид. Там арифметика на уровне начальной школы. Общий знаменатель, НОК, НОД. всё просто.

Цитата:
Сообщение от Аватар Посмотреть сообщение
Ну и храни отдельно числитель и знаменатель в целых числах. А дальше правила приведения к общему знаменателю
точно так! И я про то же самое!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.03.2018, 14:09   #9
tim8579
 
Регистрация: 23.03.2018
Сообщений: 8
По умолчанию

Отлично,

вариант worksheetfunction.Text (worksheetfunction.Pi,"# #/###") работает замечательно. Огромное спасибо!
tim8579 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Свод не числовых данных Алекс1234376 Помощь студентам 0 08.03.2015 22:18
Функции. Пусть s- множество всех рациональных чисел, представимых в виде несократимых дробей m/n veronika55214 Паскаль, Turbo Pascal, PascalABC.NET 0 17.12.2013 19:09
Создание класса дробей. Пример на сложение двух дробей. Помогите найти ошибку (С++) Сергей.Ш Общие вопросы C/C++ 5 28.10.2013 13:24
Массив числовых данных С++ ben74 Помощь студентам 1 07.02.2012 12:52
Ввод десятичных дробей в поля textbox формы NikolayGVB Microsoft Office Word 9 26.04.2009 04:55