2008-11-24 7 views
1

Почему каждый раз, когда я скомпилировать и запустить следующий код в Visual Studio 2008:static_cast путаницы вызвана несогласованностью

double value1 = 10.5; 
double value2 = 15.5; 
int whole_number = value1 + value2; 
Console::WriteLine(whole_number); 

Я получаю неправильное значение 26, а ответ 25.

Однако, когда я использую статические отливки на удвоениях, я получаю правильный ответ, который равен 25.

Как можно объяснить неправильный вывод?

ответ

9

Это абсолютно правильно.

double value1 = 10.5; 
double value2 = 15.5; 
int whole_number = value1 + value2; // int whole_number = 26.0; 
Console::WriteLine(whole_number); 

Что бы вы ожидали вместо этого? Компилятор сначала оценивает правую сторону, а затем неявно преобразуется в int. Таким образом, становится 26.026

Когда вы приводите, прежде чем добавить, то вы собираетесь добавить 10 и 15, что приводит к 25 :)

2

На самом деле, вы не можете полагаться на числа с плавающей точкой в ​​круге либо при автоматическом преобразовании. Если 26.0 представлено 26.00005, оно будет округлено до 26, если оно представлено 25.999995, оно будет округлено до 25. Если вы хотите быть уверенным, используйте стандартную функцию C round, определенную в math.h. Высказывание Таким образом, 26.0 становится 26 не совсем корректным.

+0

если это * есть * 26.0, то это станет 26. Это совершенно верно. но если это 25.999995, как вы говорите, это 25, как вы также говорите. – 2008-11-24 01:53:42

 Смежные вопросы

  • Нет связанных вопросов^_^