Dzielenie modulo, a typy danych... C++ a JS

0

Mam taki mały problemik. Gdy w Javascript napiszę program:

var n=123;
var w=(n/10)%10;
document.write(w);

Wynikiem w przeglądarce jest liczba 2.3000000000000007 co mnie nie dziwi bo reszta z dzielenia 12.3 przez 10 to 2.3...

Gdy jednak wpiszę taki sam kod w C++:

#include <iostream>
#include <cstdio>
using namespace std;

int main(){

int n;

cout << "Podaj liczbe.";
cin >> n;  //Podaje 123
float w = (n/10)%10;
cout << w;
cin.ignore();
getchar();
return 0;
}

Na ekranie pojawia się aby cyfra 2, a nie tak jak w poprzedni przypadku 2.3...
I tu moje pytanie, co jest nie tak? Podejrzewam, że coś z typami danych, ale dopiero się uczę i nie wiem co z tym zrobić.

A więc wnioskując czy to prawda, że w C++ można wykonywać modulo % tylko na liczbach całkowitych, a w js też na rzeczywistych? Co należy zrobić, aby w C++ wyświetlana została liczba 2.3?

0

dzielenie liczb całkowitych w C++ daje zawsze wynik całkowity.
a/b daje wynik z dzielenia
a%c daje wynik reszty z dzielenia
przy czym a i b muszą być całkowite.
By osiągnąć taki sam rezultat jak Java Script musisz stosować liczby zmiennoprzecinkowe i http://www.cplusplus.com/reference/clibrary/cmath/fmod/

0

1.n/10 w c++ nie da Ci 12.3, tylko 12 - musisz użyć konstrukcji 1.0*n/10;
2. Modulo jest zdefiniowane dla liczb całkowitych.

0

Dzięki za rozjaśnienie sytuacji, ale nie do końca wiem, jak to wszystko złożyć w kupe...

Mam tak:

#include <iostream>
#include <cstdio>
#include <math.h>

using namespace std;

int main(){


float w = fmod (12.3,10);
cout << w;
cin.ignore();
getchar();
return 0;
}

I wtedy faktycznie działa, pięknie pokazuje 2.3...
Z tym że gdy napiszę tak:

#include <iostream>
#include <cstdio>
#include <math.h>

using namespace std;

int main(){

int n;

cout << "Podaj liczbe.";
cin >> n;
float w = fmod (n/10,10);
cout << w;
cin.ignore();
getchar();
return 0;
}

Pokazuje dalej 2, tak jakby wczytuje jako 123/10 już 12, i wtedy reszta z dzielenia 12/10 to 2, a ja chcę żeby pokazywała się reszta z dzielenia 12.3/10 to znaczy 2.3
PS. Użyłem float, ażeby stosować liczby rzeczywiste.
PS. 2. Jadeszek, twój sposób w ogóle mi nie działa, wyskakuje mi [Error] invalid operands of types 'double' and 'int' to binary 'operator%'

1

Bo wynik int/int jest dalej intem. Dziel przez 10.0 lub zdefiniuj n jako double.

0

Dzięki, po zmienieniu n na double wszystko działa jak należy. ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1