Perić Željko Ответов: 1

Каков уровень удобства использования visual studio 10 express


Привет,
недавно я скачал Visual Studio 10 Express C++,
зарегистрировал его и начал использовать.
Я сделал простое приложение windows form,
с одной кнопкой и двумя элементами управления текстовым полем для отображения результата.
При нажатии кнопки события, программа должна запустить корыто простой
для .. следующего цикла и измерьте время выполнения.
Результаты отображаются в элементах управления textBox1 и textBox2.

Важная часть программного кода :

частный: системный::пустота обработчика button1_click(система::объект^ отправителя, класса System::EventArgs в^ е)
{
Секундомер часы;

часы.Начать();

int i = 0;
двойной k = 0;
для (i=0; i< 100; i=i+1)
{
К = К + 0.1;
}

часы.Стоп();

textBox1- & gt;Text = (часы.Истекший.Итого секунд).Метод toString();

textBox2-> Text = k. ToString();
}

Проблема заключается в том, что результат последовательного приращения стоимости
переменной k внутри looop неверно :

k = 9,99999999999998 вместо k = 10.

Это потому, что версия Visual Studio 10 является экспресс-версией
и предназначен только для оценки.

Что я уже пробовал:

Я прочитал руководство по C++, чтобы увидеть, сделал ли я этот программный код неправильным логически, и, возможно, из-за этой ошибки он дает неправильный результат, и я не нашел никакой ошибки внутри кода.

Richard MacCutchan

Это происходит потому, что вы используете переменную с плавающей запятой для своего счетчика. И поскольку у вас уже есть граф i вы могли бы просто использовать это вместо этого. Лучше всего вообще избегать типов с плавающей запятой в нормальном развитии, они всегда нужны только в сложной математике.

Perić Željko

Спасибо, я изменил тип переменной k на десятичный, и она отлично работает.

1 Ответов

Рейтинг:
10

Patrice T

Цитата:
Проблема заключается в том, что результат последовательного приращения стоимости
переменной k внутри looop неверно :

k = 9,99999999999998 вместо k = 10.
В этом нет ничего неправильного.
0.1 кодируется в двоичном значении с плавающей запятой, и вы должны знать, что 0.1 кодируется в значении с плавающей запятой не является точным. Это стандартное кодирование для c, C++ и C#.
Чтобы обрабатывать такие значения с точным кодированием, вам нужна специализированная библиотека.

Одно решение - умножить все на 10 и использовать целое число, а затем разделить на 10, когда вы хотите отобразить.

Плавающая точка-Википедия, свободная энциклопедия[^]
С/С Плавающей Запятой[^]


Perić Željko

Похоже, что я собираюсь использовать переменный тип Decimal, чтобы частично решить свою проблему.

https://msdn.microsoft.com/en-us/library/system.decimal%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396&cs-save-lang=1&cs-lang=cpp#code-snippet-1