C++ 字符串以int表示丢失的值
我想将字符串向量转换为int,但首先我想检查它是整数还是浮点 比如说C++ 字符串以int表示丢失的值,c++,string,casting,int,C++,String,Casting,Int,我想将字符串向量转换为int,但首先我想检查它是整数还是浮点 比如说 //private member h file unsigned int lemon; // cant write auto lemon so I cant check what type it is unsigned int sugar; unsigned int water; //method int class::name(std::vector<std::string>
//private member h file
unsigned int lemon; // cant write auto lemon so I cant check what type it is
unsigned int sugar;
unsigned int water;
//method
int class::name(std::vector<std::string> params)
std::stringstream str0(params.at(1));
str0 >>lemon;
std::cout<<lemon<<std::endl;
它给了我
3
当我检查(1)处的参数时,它只会返回我以前写的输入
3.2
有人能告诉我哪里出了问题,我如何检查字符串是否为浮点/双精度/int吗?如果您想获得准确的输入值(用户如何提供),请使用
string
保存值。
如果需要保存浮点值,请使用类型double
保存值
键入
int
只能保存整数值,如3。使用>>从流中提取int时,只要有字符可以被视为int的一部分,它就会读取。整数不允许小数部分,因此int值中没有小数点
您可以尝试以int形式解析,并检查解析是否使用了所有输入字符。或者解析为float并查看结果是否为分数:
#include <iostream>
#include <sstream>
#include <string>
#include <cmath>
int main()
{
unsigned int i;
std::stringstream str0("3");
std::stringstream str1("3.2");
str0 >>i;
std::cout << i << " " << str0.eof() << std::endl;
str1 >>i;
std::cout << i << " " << str1.eof() << std::endl;
double d;
std::stringstream str2("3");
std::stringstream str3("3.2");
str2 >>d;
std::cout << d << " " << (d == floor(d)) << std::endl;
str3 >>d;
std::cout << d << " " << (d == floor(d)) << std::endl;
}
请提供一份报告。目前还不太清楚输出是如何来自您提供的代码的。如果您不确定输入是什么,您甚至不能假设它是数字。您是否对从
“3.2”
获得3
感到惊讶?还是你在问别的问题?你试图将一个double
存储到int
中,这样你就失去了精度,3.2
变成3
这很正常,用double
或float
代替int
为什么会给你3.2
?这是亵渎神明的回答有什么不对?选民会费心解释原因吗?
#include <iostream>
#include <sstream>
#include <string>
#include <cmath>
int main()
{
unsigned int i;
std::stringstream str0("3");
std::stringstream str1("3.2");
str0 >>i;
std::cout << i << " " << str0.eof() << std::endl;
str1 >>i;
std::cout << i << " " << str1.eof() << std::endl;
double d;
std::stringstream str2("3");
std::stringstream str3("3.2");
str2 >>d;
std::cout << d << " " << (d == floor(d)) << std::endl;
str3 >>d;
std::cout << d << " " << (d == floor(d)) << std::endl;
}
3 1
3 0
3 1
3.2 0