Wynik całkowity czy rzeczywisty jak system ma odróżnić.

0

Może takie pytanie trochę głupie, ale mam z tym problem.
Użytkownik ma podać 2 liczby i nie wiem czy poda całkowitą czy rzeczywistą.
I przykładowo te liczby mają być dodane do siebie.
I teraz jak zrobić żeby wynik mi wyświetlało jako liczbę całkowitą jeśli użytkownik podał liczby całkowitę, a jak wyświetlić wynik rzeczywisty jeśli podał liczby rzeczywiste?
Chodzi mi o to że jeśli poda 2.5 + 2 to żeby się wyświetliło wynik = 4.5 a jeśli poda 2 + 2 to wynik = 4 ...
Chodzi głownie o to żeby system rozróżniał w jakiej postaci ma wyświetlić wynik w zależności od tego jakiego typu użytkownik podał wynik, bo jak daje zmienną typu float to jak on wpisze np. 2 + 2 to wynik wyświetla 4.000000 z tymi nie potrzebnymi zerami.

1

Ja bym podszedł do problemu trochę inaczej. Wszystkie obliczenia robił bym na double, ale potem obcinał końcowe zera.
No trailing zeros

0

Jak mógłbym te końcowe zera obciąć ... jestem nowy w programowaniu i nie znam się jeszcze tak dobrze.

1

Coś mi się wydaje, że coś przekombinowałeś, bo po prostu wszystko działa:
https://godbolt.org/z/3f57zhqnz

Radziłbym dostarczyć minimalny kompletny reprodukowany przykład problemu.

0

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

using namespace std;

string kalkulator ( float a, float b, char z );

int main()
{

float a, b;
char z;

cout << "Podaj pierwszą liczbę: " << endl;
cin >> a;
cout << "Podaj znak: " << endl;
cin >> z;
cout << "Podaj drugą liczbę: " << endl;
cin >> b;

cout << kalkulator (a, b, z) << endl;

return 0;
}

string kalkulator ( float a, float b, char z )
{
if ( z == '+' )
{
return "Wynik = " + to_string ( a + b );
}
if ( z == '-')
{
if ( a < b )
return "Wynik = " + to_string ( a - b );
else
return "Wynik = " + to_string ( b - a );
}
if ( z == '*' )
{
return "Wynik = " + to_string ( a * b );
}
if ( z == '/' )
{
return "Wynik = " + to_string ( a / b );
}
else
{
return "Podałeś niewłaściwy znak! ";
}
}

Jeśli tam wpisze 2 i 2 to wyjdzie 4.0000000
a ja chce bez tych 0
jeśli dam typ integer to mi nie wyświetli poprawnego wyniku jak podam np. 2,5 + 2

1

C++ potrafi rozróżnić:

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

int main()
{
	double x=2;
	cout<<"x="<<x<<endl;
	x=2.4;
	cout<<"x="<<x<<endl;
}

Co innego to_string().
Niech kalkulator() zwraca double lecz wypisywanie zrób w main()

0
KamilAdam napisał(a):

Ja bym podszedł do problemu trochę inaczej. Wszystkie obliczenia robił bym na double, ale potem obcinał końcowe zera.

U mnie nie dziala (od razu widac ze nie jestem administratorem):

uint64_t a = std::numeric_limits<uint64_t>::max() >> 10;
uint64_t b = static_cast<double>(a);
assert(a == b);

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