在 C++ 中使用 atof() 将字符串转换为浮点数
Converting string to float with atof() in C++
我是C++新手,我需要帮助将字符串变量转换为数字。我需要在屏幕上打印这个人的年龄和她的下一岁,但我不知道怎么做。我不能用字符串做数学。所以你能给我举几个例子吗?
我尝试这样做:
//converts F to C
ctemp=(ftemp-32)*5.0/9.0;
//calculates age
age2 = age + 1 ; age2 = atof (age2.c_str()); age = atof (age.c_str());
cout<<name<<" is "<<age<<" now, and will be " <<age2<<" a year from now.n"<<"Its "<<ftemp<<" in "<<city<<"--- That's "<<setprecision(2)<<ctemp<<" degrees C"<<endl;
编辑:
int main() {
int city;
double ftemp, ctemp,age,age2;
string buf,name; //Ask user to enter age, name, temperature and city
cout<<"Enter your agen";
cin>>buf;
age = atof(buf.c_str());
cout<<"Enter your full name pleasen";
getline(cin,name);
cout<<"Enter the outside temperature pleasen";
cin>>buf;
ftemp=atof(buf.c_str());
cout<<"Enter the current city you are inn";
cin>>buf;
city=atoi(buf.c_str());
}
您可以使用字符串流将字符串转换为所需的数据类型:
#include <sstream>
#include <string>
#include <iostream>
int main() {
std::string num_str = "10.5";
std::istringstream iss(num_str);
float f_val = 0;
iss >> f_val;
//this will output 10.5 (as expected)
std::cout << f_val << std::endl;
return 0;
}
这会将f_val
分配给字符串的值。
此方法是首选方法,因为它具有内置的转换检查,并且可以处理任何基本C++类型。因此,如果可以创建一个模板函数来为您执行检查并返回所需类型的特定值:
#include <sstream>
#include <iostream>
#include <string>
#include <stdexcept>
template<typename T>
T ConvertStringToNumber(const std::string& str)
{
std::istringstream ss(str);
T number = 0;
ss >> number;
if (ss.fail( ))
{
throw std::invalid_argument("ConvertStringToNumber:" + str);
}
return number;
}
int main(int argc, char argv[]){
std::string num_str = "10.5";
float f = ConvertStringToNumber<float>(num_str);
std::cout << f << std::endl;
return 0;
}
由于没有提到华氏度到摄氏度(摄氏度(的转换,我们将忽略它。
正如最初所写,问题似乎是在问这行:
age2 = age + 1 ; age2 = atof (age2.c_str()); age = atof (age.c_str());
我们没有看到声明。 目前,我假设有一个预先声明:
double age, age2;
鉴于此(并假设在此行之前没有对age
或age2
进行其他操作(,将age2
设置为 age + 1
会将 1 添加到未定义的值并将其存储在 age2
中。 然后存储的值被分配转换的结果...等等,你在开玩笑...将age2
转换为 C 字符串并将atof()
应用于结果的结果。 所以,也许我对age2
的假设类型是错误的——它真的很std::string
? 但是,如果age2
是一个字符串,那么您在之前的赋值中遇到了问题,并且此age2 = atof(age2.c_str());
赋值也不起作用。 类似的问题适用于age = atof(age.c_str());
分配。 逻辑应该是"分配给age
; age2 = age + 1;
'。
str:string s_age = "21";
double age = atof(s_age.c_str());
double age2 = age + 1;
std::cout << "Age: " << age << ", Next year: " << age2 << endl;
想想测序。 考虑类型。 当您下次提出问题时,请显示类型! 查找创建 SSCCE(简短、自包含、正确的示例(所需的条件,并在可能的情况下将问题中的代码设为 SSCCE。
我回避讨论atof()
(或问题标题中最初提到的atoi()
,但在问题正文中没有再次提及(是否是将 C 字符串转换为double
或int
的好方法; 有更好的方法可以在 C 和 C++ 中进行这些转换, 并且C++中的机制与 C 中的机制不同,尤其是当源字符串是std::string
时。
-
正如我在上面的评论中所说,使用浮点数表示年龄和年龄:
float age, age2; // do math cout<<name<<" is "<<age<<" now, and will be " <<age2<<" a year from now.n";
-
使用Qt作为您的C++框架并享受C++
QString age("15.5"); double temp = age.toDouble();
#include "iostream.h"
main() {
float a,b,rmvivek,arni;
char ch="123.00";
a=atof(ch);
arni=a+2*5;
cout << "the a value is" << arni;
}
- 如何将包含epoch时间的十六进制字符串转换为time_t
- 当字符串存储在变量中时,如何将字符串转换为wchar_t
- 如何将这个std::字符串转换为std::基本字符串
- 如何正确将字符串转换为标准::时间::system_clock::time_point?
- 如何在C++中将十六进制字符串转换为文本数据
- 需要帮助在 c++ 中将字符串转换为字符 ----错误 "const char *" 类型的值不能用于初始化 "char" 类型的实体
- 如何从字符串转换为双精度*
- C++:如何将 unix 时间的字符串转换为 *tm?(使用时间错误:"cannot convert 'String' to 'tm*' ")
- 如何在C++中将 Python 字符串转换为其转义版本?
- 如何在 C++11 中将标准::字符串转换为标准::u32字符串?
- 如何将整数字符串转换为整数的二维向量?
- 使用 "stringstream " 将字符串转换为整数
- 将字符串转换为浮点数或整数,而无需使用内置函数(如 atoi 或 atof)
- 将文件复制到自定义位置,存在字符串转换问题
- 将ANSI C字符串转换为UNICODE
- 如何将节点 V8 字符串转换为 C++ 字符串
- 在C++中将字符串转换为双精度,而无需科学记数法
- 使用从文件(stod、strtod、atof)中提取的数据C++从字符串转换为双精度.csv
- 如何在C++中将字符串转换为双精度?
- 将字符串转换为无符号字符数组/字节数组