![](/img/trans.png)
[英]Converting double to string in C++ gives strange characters (Chinese characters?)
[英]Converting strange string to double C++
我需要将数据从文件转换为双精度数据,有时数据格式为:
0.3387000000D+02 0.6067999217D-02
0.5095000000D+01 0.4530799416D-01
0.1159000000D+01 0.2028219738D+00
0.3258000000D+00 0.5039029350D+00
0.1027000000D+00 0.3834209505D+00
你会如何处理这里的D
?
这是只有D
而不是E
的科学记数法。
我正在考虑在这里使用std::regex
但我希望有一个更优雅的策略。
类似于以下内容:
std::regex rr( "((\\+|-)?[[:digit:]]+)(\\.(([[:digit]]+)?))?(d|D)((\\+|-)?)[[:digit:]]+)""?");
用带有std::replace
的E
替换D
,之后它就很简单了:
std::string s = "0.3387000000D+02";
std::replace( s.begin(), s.end(), 'D', 'E');
std::cout << std::stod(s);
或std::replace_if
:
bool isD(char c) {
return c == 'D';
}
std::string s = "0.3387000000D+02";
std::replace_if( s.begin(), s.end(), isD, 'E');
std::cout << std::stod(s);
Output:
33.87
你可以这样做。
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <cmath>
double string2double(std::string s)
{
// Find the index of scientific D
int indexD = s.find('D');
// separate the base from rest, start at 0 and go till index of D, without D
std::string number = s.substr(0, indexD);
//indexD+2 to ignore D and plus
std::string power = s.substr(indexD+2);
// do conversion from string to number
double rawNumber = std::stod(number);
double powerNumber = std::stod(power);
//test
std::cout << rawNumber << std::endl;
std::cout << powerNumber << std::endl;
//return
return rawNumber * std::pow(10, powerNumber);
}
int main()
{
std::string s = "0.3387000000D+02";
std::cout << string2double(s) << std::endl;
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.