C++ zły wynik liczenia 100*0,22=21


(dragonn) #1

Jestem początkującym programistą i zrobiłem sobie taki program

#include 

#include 

void main()

{

	float nNETTO;

	std::cout << "Podaj wartość netto: ";

	std::cin >> nNETTO

	;const float PODATEK = 0.22;

	int nWYNIK = nNETTO * PODATEK;

	;std::cout << nNETTO << " * " << PODATEK << " = " << nWYNIK;

	;_getch();

}

I wychodzi mi takie coś:

13ca4e8ebf9fa082.jpg

Coś czytałem że takie błędy mogą być ale dlaczego tak się dzieje(szukałem na google ale nic nie znalazłem albo źle szukałem) :?:


(matiit) #2
int nWYNIK = nNETTO * PODATEK;

Przecież wynik też będzie liczbą dziesiętną.

#include 

using namespace std;

int main()

{

	float nWYNIK;

	float PODATEK = 0.22;

	float nNETTO;

	cout << "Podaj wartość netto: ";

	cin >> nNETTO;

	nWYNIK = nNETTO * PODATEK;

	cout << nNETTO << " * " << PODATEK << " = " << nWYNIK;

}

(Desktop)./a.out 

Podaj wartość netto: 100

100 * 0.22 = 22                                                    

(Desktop)./a.out

Podaj wartość netto: 250

250 * 0.22 = 55

(Sawyer47) #3

Float jest małej precyzji, dodatkowo przypisujesz do typu int i następuje utrata dokładności.

float a = 100.0f;

	float b = 0.22f;


	std::cout << "a * b = " << a * b << '\n'; // 22

	std::cout << "(int)(a * b) = " << (int)(a * b) << '\n'; // 21

(dragonn) #4

A już rozumiem zamiast int nWYNIK miałem dać float nWYNIK już jest dodrze, dzięki :smiley: .

Co znaczy że float jest małej dokładności :?: