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.
Ja bym podszedł do problemu trochę inaczej. Wszystkie obliczenia robił bym na double, ale potem obcinał końcowe zera.
No trailing zeros
Jak mógłbym te końcowe zera obciąć ... jestem nowy w programowaniu i nie znam się jeszcze tak dobrze.
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.
#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
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()
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);