Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 字符串以int表示丢失的值_C++_String_Casting_Int - Fatal编程技术网

C++ 字符串以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>

我想将字符串向量转换为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> 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