我想读取一个双精度数字并确定输入是Integer还是double。问题是当我输入1.00
(是双精度)时,我得到的结果是整数
double a;
cin >> a;
if (a == int(a))
cout << "Integer";
else
cout << "Double";
答案 0 :(得分:4)
您可以读入字符串并检查其是否包含小数点分隔符。假设它是“。”,这是一个示例实现:
#include <iostream>
#include <string>
int main()
{
std::string s;
std::cin >> s;
std::cout << ((s.find('.') == std::string::npos) ? "integer" : "double") << std::endl;
return 0;
}
您还必须检查指数(例如2e-1
)。这是完成这一切的一种方法:
#include <iostream>
#include <string>
int main()
{
std::string s;
std::cin >> s;
if (s.find_first_of(".,eE") == std::string::npos)
std::cout << "integer" << std::endl;
else
std::cout << "double" << std::endl;
return 0;
}
答案 1 :(得分:3)
答案 2 :(得分:0)
也许std::variant
是解决问题的一种优雅方法。 std::variant<int, double>
可以存储int
或double
。取决于您存储的内部类型将发生变化。
#include <variant>
#include <string>
#include <cassert>
bool isInt(const std::variant<int, double> &intOrDouble) {
try {
std::get<double>(intOrDouble);
}
catch (const std::bad_variant_access&) {
return false;
}
return true;
}
int main()
{
std::variant<int, double> intOrDouble;
intOrDouble = 12.0; // type will be double -> return will be 1
//intOrDouble = 12; // type will be int -> return will be 0
return isInt(intOrDouble);
}