Форум программистов, компьютерный форум, киберфорум
Наши страницы

C++/CLI Windows Forms

Войти
Регистрация
Восстановить пароль
 
Noobass
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 100
#1

Плавающая точка в калькуляторе - C++/CLI WinForms

26.02.2013, 19:59. Просмотров 1231. Ответов 6
Метки нет (Все метки)

Привет, ребята. Я решил заняться самообразованием и вот, уже начал писать калькулятор с визуальным интерфейсом Вот только у меня возникла одна проблемка. У меня не получается установить точку-разделитель числа Существует две версии.
Первая:
C++
1
2
3
private: System::Void point_Click(System::Object^  sender, System::EventArgs^  e) {
             txt->Text = (txt->Text) + System::Convert::ToString(".");          
         }
я просто запихиваю точку в текст. Точка действительно появляется в поле, однако число в дабл не конвертируется (Тоже самое происходит, если ввести точку руками, кстати)
Вторая версия:
C++
1
2
3
4
private: System::Void point_Click(System::Object^  sender, System::EventArgs^  e) {     
             cout.setf(ios_base::fixed, ios_base::floatfield);
             cout.setf(ios_base::showpoint);
         }
Подключаю библиотеку инклуде, и она форматирует ввод, однако такой подход тоже не работает . Ребята, подскажите, как быть??
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.02.2013, 19:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Плавающая точка в калькуляторе (C++/CLI WinForms):

Ошибки в калькуляторе - C++/CLI WinForms
Помогите,пожалуйста! выдает такие ошибки: Error 4 error C3845: 'My5laba::Form1::delenie': only static data members can be initialized...

Показатели в калькуляторе - C++/CLI WinForms
Создал калькулятор. Но он показывает слишком точное значение, например, при операции 4,1 + 6 выводит 10.0099 и т д. это первая проблема....

Реализация памяти в калькуляторе - C++/CLI WinForms
Первый день в visual c++:gsorry: Помогите доделать калькулятор:gcray2: Не знаю как сделать кнопочки: «П» – поместить...

Обработать деление на ноль в калькуляторе - C++/CLI WinForms
Только начала "творить" в visual c++ ,и сразу возник вопрос... при выполнении операции деления нужно проверить, чтобы второй операнд не...

Увеличить количество кнопок на форме в калькуляторе - C++/CLI WinForms
Помогите пожалуйста, скачал недавно калькулятор (сам ещё не изучил создание калькулятора) сделанный на С++, решил его доработать,...

плавающая точка в делфи - Delphi
Здравствуйте!!! Можно спросить, какое минимальное количество знаков, должно быть при плавающей точки и какое максимальное?

6
ReasonX7
47 / 46 / 2
Регистрация: 11.12.2011
Сообщений: 147
26.02.2013, 20:19 #2
Тут нужно поставить проверку на нажатие точки. Сам алгоритм записи дробной части числа будет выглядеть где-то так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int countOfDigitsAfterPoint = 0;
if (point_pressed)
{
    countOfDigitsAfterPoint++;
    number += pow(0.1, countOfDigitsAfterPoint) * digit;
}
 
/* 
Где:
number - число, которое вводит пользователь.
countOfDigitsAfterPoint = количество цифр после точки.
digit - цифра, которую только что ввел пользователь.
*/
1
Noobass
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 100
26.02.2013, 20:31  [ТС] #3
point_pressed - это типо название функции кнопки? или как?
0
ReasonX7
47 / 46 / 2
Регистрация: 11.12.2011
Сообщений: 147
26.02.2013, 21:04 #4
Noobass, это название переменной. Сейчас покажу, что я имел введу.

Добавлено через 15 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
bool point_pressed;
    private: System::Void textBox1_KeyPress(System::Object^  sender, System::Windows::Forms::KeyPressEventArgs^  e) 
    {
        if (e->KeyChar == '.')
        {
            point_pressed = true;
        }
    }
    private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) 
    {
        point_pressed = false;
    }
1
Noobass
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 100
28.02.2013, 21:32  [ТС] #5
ReasonX7, Вот это я еще более-менее понял логику.
C++
1
2
3
4
5
6
7
bool point_pressed;
    private: System::Void textBox1_KeyPress(System::Object^  sender, System::Windows::Forms::KeyPressEventArgs^  e) 
    {
        if (e->KeyChar == '.')
        {
            point_pressed = true;
        }
а вот остаток не совсем.. Получается form1_load переставляет поинт_прессед на фалсе, когда включается программа? а почему сразу не инициализировать point_pressed как false?
0
ReasonX7
47 / 46 / 2
Регистрация: 11.12.2011
Сообщений: 147
01.03.2013, 17:31 #6
Noobass, потому что здесь идет работа с классами. Если написать
C++
1
bool point_pressed = false;
, то компилятор выбьет ошибку. Поэтому инициализацию мы делаем в отдельном событии, в нашем случае при загрузке формы.

Добавлено через 1 минуту
Советую на досуге почитать.
1
Noobass
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 100
03.03.2013, 21:49  [ТС] #7
ReasonX7, хорошо, обязательно попробую использовать твой подход Надеюсь, это сработает
0
03.03.2013, 21:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.03.2013, 21:49
Привет! Вот еще темы с ответами:

Точка в калькуляторе - ActionScript
Может кто-нибудь знает как сделать точку в калькуляторе, точку которая отделяет целую и дробную часть?

Точка в калькуляторе. Программа падает при вычислениях - JavaFX
У меня задача - калькулятор. Есть часть кода которая нестабильно работает, т.е. когда просто жмешь на точку, то калькулятор уходит в полный...

Что обозначает сообщение "Плавающая точка переполнения". При работе со СТРИНГРИД - C++ Builder
Здравствуйте Форумчани. Всех с прошедшим летом. Начинаем работать. Тема следующая. Создал форму. Решаю обычный пример с помощью...

Плавающая запятая - Информатика
Вычислить 594,194 - 194 в двоичной системе счислений в формате с плавающей запятой


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru