![](/img/trans.png)
[英]precision loss while converting from python float to C++ double
[英]Loss of Precision when Converting Double to String in C++
所以我知道在打印精度為n
的double值時應該使用setprecision(int n)
。 但是,我遇到的問題與我正在研究的項目類似:
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
double var = 1.0000001;
cout << setprecision(10)<< var << endl;
string str = to_string(var);
cout << str << endl;
return 0;
}
這是輸出:
1.0000001
1.000000
在我正在進行的項目中,我需要將double值保存為字符串,並且偶爾需要超過六位小數的精度。 在這里,轉換中明顯丟失了精度。 任何指針都將非常感激。
你可以使用std::stringstream
。
#include <iostream>
#include <sstream>
#include <iomanip>
using namespace std;
int main(void) {
double var = 1.0000001;
cout << setprecision(10)<< var << endl;
stringstream ss;
ss << setprecision(10) << var;
string str;
ss >> str;
cout << str << endl;
return 0;
}
嘗試這個:
#include <sstream>
#include <string>
// In some function:
double d = 453.23;
std::ostringstream os;
os << d;
std::string str = os.str();
如果你想獲得雙精度的完整精度而不將其限制為一個特定的值(暗示你的“偶爾需要超過六位小數”),如果你使用的是Boost庫,你也可以嘗試以下替代方法:
#include <boost/lexical_cast.hpp>
#include <iostream>
using namespace boost;
using namespace std;
int main() {
double var = 1.0000001;
cout << lexical_cast<string>(var) << endl;
return 0;
}
這在我的一個應用程序中證明是有用的,其中精度確實很重要,並且由於使用了一些特定的日志記錄函數包裝器, std::stringstream
方法不是非常方便和優雅。 你可以找到更多信息 boost::lexical_cast
以及它如何與內部表示涉及這里 。
顯然,如果您目前沒有在項目中使用Boost,這種方法就太過分了 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.