2016-06-02 3 views
-3

Вот моя проблема:C++ static_cast возвращает ноль

#include <stdio.h> 
#include <math.h> 

int main() 
{ 

    int n = static_cast<int>(50 * (60/99)); 

    printf("Floor: %d\n", n); 

    return 0; 
} 

Почему функция печати 0, когда он должен напечатать 30?

Поскольку результат расчета: 30,30303030

+0

больше как 0,6 .. как сделать вычисление отверстия для возврата 30? –

+1

60/99 оценивается как целочисленная математика, поэтому результат равен 0. Измените либо значение на плавающую точку: '60.0f/99.f' будет делать один из способов выполнения задания. –

+0

Одним из способов архивирования является использование другого языка, такого как JavaScript, или языка, который вы разрабатываете, который поддерживает 'static_cast', деление, которое всегда возвращает значение с плавающей запятой, и все другие функции, которые вы хотите. – MikeCAT

ответ

1

Результат расчета не 30.30303030, но из-за 0

  1. 60/99 вычисляется. Результат усекается к нулю, потому что это целочисленное деление, и результат равен 0
  2. 50 * 0. Результат равен 0.

Вы должны сделать расчет, используя double.

#include <stdio.h> 
#include <math.h> 

int main() 
{ 

    int n = static_cast<int>(50.0 * (60.0/99.0)); 

    printf("Floor: %d\n", n); 

    return 0; 
} 

Использование 50 * (60.0/99) или 50 * (60/99.0) вместо 50.0 * (60.0/99.0) также хорошо, потому что другие операнды будут преобразованы в double для соответствия типов, но с использованием 50.0 * (60/99) не хорошо, потому что 60/99 0.

+0

Большое вам спасибо: D Я не думал, что двойной поможет: D проблема решена. Теперь я могу легко кодировать остальную систему. Поскольку 50 - переменная PlayerLevel. –

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