C++ 比较两个包含浮点值的字符串

C++ 比较两个包含浮点值的字符串,c++,C++,我得到了两个包含浮点数的字符串。我需要比较一下。我是否可以使用std::string::compare直接比较字符串,这是否总能给出正确的结果?我目前的方法是使用std::stof将字符串转换为float,但是我更愿意避免使用C++11库函数。简单地比较字符串对以下情况没有帮助 a = "0.43" b = "0.4300" 如果需要比较,首先将它们解析为float,然后比较它们 std::string s1 = "0.6" std::wstring s2 = "0.7" float d1

我得到了两个包含浮点数的字符串。我需要比较一下。我是否可以使用
std::string::compare
直接比较字符串,这是否总能给出正确的结果?我目前的方法是使用
std::stof
将字符串转换为float,但是我更愿意避免使用C++11库函数。

简单地比较字符串对以下情况没有帮助

a = "0.43"
b = "0.4300"
如果需要比较,首先将它们解析为float,然后比较它们

std::string  s1  = "0.6"
std::wstring s2 = "0.7"
float d1  = std::stof(s1);
float d2 = std::stof(s2);
然后比较它们

std::string  s1  = "0.6"
std::wstring s2 = "0.7"
float d1  = std::stof(s1);
float d2 = std::stof(s2);
这是一个完整的程序

#include <iostream>   // std::cout
#include <string>     // std::string, std::stof

int main ()
{
  std::string  s1  = "0.6"
  std::wstring s2 = "0.7"
  float d1  = std::stof(s1);
  float d2 = std::stof(s2);

  if(d1 == d2)
     std::cout << "Equals!";
  else
     std::cout << "Not Equals!";
  return 0;
}
#包括//std::cout
#包括//std::string,std::stof
int main()
{
std::string s1=“0.6”
std::wstring s2=“0.7”
浮点数d1=std::stof(s1);
浮点数d2=std::stof(s2);
如果(d1==d2)

写一些难看的代码怎么样?这可能不是一个好的做法,但是

int compare (const string &str1, const string &str2) {
    string *s1 = &str1, *s2 = &str2;
    int isReverse = 1;
    int len1, len2;

    if (str1.length() > str2.length()) {
        s1 = &str2;
        s2 = &str1;
        isReverse = -1;
    }

    len1 = s1->length();
    len2 = s2->length();

    if (!len1) {
        if (!len2))
            return 0;
        else if ((*s2)[0] != '-')
            return 1*isReverse;
        return -1*isReverse;
    }

    int i = 0;
    while(i < len1) {
        if ((*s1)[i] > (*s2)[i])
            return 1*isReverse;
        else if ((*s1)[i] < (*s2)[i])
            return -1*isReverse;
        i++;
    }

    while (i < len2) {
        if ((*s2)[i] != '0')
            return -1*isReverse;

        i++;
    }

    return 0;
}
int比较(常量字符串和str1、常量字符串和str2){
字符串*s1=&str1,*s2=&str2;
int isReverse=1;
int len1,len2;
if(str1.length()>str2.length()){
s1=&str2;
s2=&str1;
isReverse=-1;
}
len1=s1->length();
len2=s2->length();
如果(!len1){
如果(!len2))
返回0;
如果((*s2)[0]!='-'),则为else
返回1*isReverse;
返回值-1*isReverse;
}
int i=0;
而(i(*s2)[i])
返回1*isReverse;
如果(*s1)[i]<(*s2)[i])
返回值-1*isReverse;
i++;
}
而(i
@NaCl前导零呢?负零和正零呢?科学表示法和固定表示法呢?
stof
未在此范围内声明,因为您尚未声明您正在使用名称空间
std
。因此,请在文件开头声明
使用名称空间std;
,或者使用
std::stof
改为.DBSystem.cpp:847:50:错误:如果(!condflag)flag=flag |(rec[x]>=std::stof(breakCond[k][2]),则“stof”不是“std”的成员。
这听起来像是一个x和Y问题。您的问题可能是您没有在C++11模式下编译,或者您的编译器不支持它(即MinGW bug)请澄清您的问题,使其不依赖于
std::stof
。@Ayush这里是一种使用方法。它还提到
boost::lexical\u cast
std::stringstream
。所有有效的C++03选项。不过,我相信您的问题一次问的问题太多了。您的核心问题是什么?比较浮点数或将字符串转换为浮点数(这是重复的)?@Columbo gimmi a minute不应使用
=
来比较浮点数是否相等,因为它们本质上是不精确的。例如,你应该检查数字之间的差异是否在某个小范围内。
12.3
vs
4.5
是一个更好的例子:PHoly buckets你在干什么?!