减去双向量返回扩展符号 我的C++代码在尝试和减去顶部值时返回扩展的符号。 vector<std::string> smarkdat vector<std::string> markdat; vector<double> doubleMdat; vector<double> sdoubleMdat; markdat = getmarketbuyData(); smarkdat = getmarketsellData(); transform(smarkdat.begin(), smarkdat.end(), back_inserter(sdoubleMdat), [](string const& val) {return stod(val);}); auto sbiggestMark = std::max_element(std::begin(sdoubleMdat), std::end(sdoubleMdat)); transform(markdat.begin(), markdat.end(), back_inserter(doubleMdat), [](string const& val) {return stod(val);}); auto biggestMark = std::max_element(std::begin(doubleMdat), std::end(doubleMdat)); std::cout << "The highest seller is " << *sbiggestMark << " at position " << std::distance(std::begin(sdoubleMdat), sbiggestMark) << std::endl; std::vector<double> difference(sdoubleMdat.size(), 0.0); for ( std::vector<double>::size_type i = 0; i < sdoubleMdat.size(); i++ ) { difference[i] = std::abs( sbiggestMark[i] - biggestMark[i] ); cout << difference[i] << endl; }

减去双向量返回扩展符号 我的C++代码在尝试和减去顶部值时返回扩展的符号。 vector<std::string> smarkdat vector<std::string> markdat; vector<double> doubleMdat; vector<double> sdoubleMdat; markdat = getmarketbuyData(); smarkdat = getmarketsellData(); transform(smarkdat.begin(), smarkdat.end(), back_inserter(sdoubleMdat), [](string const& val) {return stod(val);}); auto sbiggestMark = std::max_element(std::begin(sdoubleMdat), std::end(sdoubleMdat)); transform(markdat.begin(), markdat.end(), back_inserter(doubleMdat), [](string const& val) {return stod(val);}); auto biggestMark = std::max_element(std::begin(doubleMdat), std::end(doubleMdat)); std::cout << "The highest seller is " << *sbiggestMark << " at position " << std::distance(std::begin(sdoubleMdat), sbiggestMark) << std::endl; std::vector<double> difference(sdoubleMdat.size(), 0.0); for ( std::vector<double>::size_type i = 0; i < sdoubleMdat.size(); i++ ) { difference[i] = std::abs( sbiggestMark[i] - biggestMark[i] ); cout << difference[i] << endl; },c++,vector,C++,Vector,矢量数据是字符串0.000000200转换为双精度的 如何返回一个2倍的常规减法值,而不是非常明显的错误返回值?如果问题是要在不使用科学记数法的情况下设置输出,请使用std::setprecision和std::fixed: #包括 #包括 #包括 使用名称空间std; int main() { 双x=晶圆厂(sqrt(2.0)-sqrt(2.0001)); 我想你可以试试biginteger,或者在无符号long中存储差异,longstd::fixed和std::setprecision是你的

矢量数据是字符串
0.000000200
转换为双精度的


如何返回一个2倍的常规减法值,而不是非常明显的错误返回值?

如果问题是要在不使用科学记数法的情况下设置输出,请使用
std::setprecision
std::fixed

#包括
#包括
#包括
使用名称空间std;
int main()
{
双x=晶圆厂(sqrt(2.0)-sqrt(2.0001));

我想你可以试试biginteger,或者在无符号long中存储差异,long
std::fixed
std::setprecision
是你的朋友。@remyabel你能提供更多细节吗?
向量数据是字符串0.000000200,转换成双精度
如果你说的是
差异
值不是字符串。它是减去两个
double
值时的值。@我的我仍然不明白问题是什么。你有两个向量的双值,你得到每个值的差值的绝对值并存储在向量中,从而得到一个双值向量。那么问题是什么?如果你想要这个值的话显示在屏幕上,然后使用i/o操纵器以您希望在屏幕上看到的方式格式化数据。如果是其他问题,那么您需要澄清您的问题。@kuroi neko printf borks以完全相同的方式,仍然需要精度。它也不喜欢那些长双倍。精度才是真正正确的答案.这完全取决于你对“常规”和“非常明显不正确”的定义是什么。。。
8.636e-05
#include <iostream>
#include <iomanip>
#include <cmath>

using namespace std;

int main()
{
    double x = fabs(sqrt(2.0) - sqrt(2.0001));
    cout << x << "\n"; 
    cout << setprecision(10) << fixed << x << '\n';
}