2013-11-27 17 views
6

Muszę użyć '%' z podwójnymi liczbami, ale w C++ to nie działa. Przykład:błąd C2296: "%": niedozwolony, lewy operand ma typ "double" w C++

double x; 
temp = x%10; 

otrzymuję ten błąd:

error C2296: '%' : illegal, left operand has type 'double' 

Jak mogę rozwiązać ten problem bez konwersji numeru od Double do liczby całkowitej? Jeśli to zrobię, stracę część ułamkową, a ja nie chcę.

Czy jest inna alternatywa?

+2

'%' operator nie jest zdefiniowany dla 'double's. Możesz zrobić "int% anotherInt". Wypróbuj ['fmod'] (http://en.cppreference.com/w/cpp/numeric/math/fmod) – Maroun

+0

Jakich rezultatów oczekujesz, stosując% do podwojenia? –

+2

Podział z resztami ma sens wyłącznie w przypadku podziału na liczby całkowite. '53,0/10 == 5,3', więc nie ma reszty dla podziału" podwójnego ". – MSalters

Odpowiedz

14

% nie jest zdefiniowany dla podwójnej, ale można użyć fmod zamiast:

Compute remainder of division Returns the floating-point remainder of numer/denom (rounded towards zero):

Przykład (dostosowany C++) od http://www.cplusplus.com/reference/cmath/fmod/:

#include <cmath>  /* fmod */ 
#include <iostream> 

int main() 
{ 
    std::cout << "fmod of 5.3/2 is " << std::fmod (5.3, 2) << std::endl; 
    return 0; 
} 
+0

Mam podobne problemy, ale Twoja sugestia nie działa dla mojej. Dzieje się tak, ponieważ problemy występują w> C: \ Program Files (x86) \ Windows Kits \ 8.0 \ Include \ um \ winbase.h (1999): To plik Microsoft. Aktualizacja nie jest możliwa. Jakikolwiek sposób na pokonanie tego problemu poza tą drogą? –

3

pomocą the fmod funkcyjnych

#include <math.h> 

double x; 
temp = fmod(x, 10.0); 
+1

'#include ', prawdopodobnie, jak to jest C++, i 'std :: fmod'. – creichen

Powiązane problemy