繁体   English   中英

在 C++ 中声明双精度变量时如何使用 setprecision()?

[英]How do you use setprecision() when declaring a double variable in C++?

因此,我正在尝试了解有关 C++ 的更多信息,并且正在通过为二次方程制作计算器 class 来练习。 这是下面的代码。

#include "QuadraticEq.h"
 
string QuadraticEq::CalculateQuadEq(double a, double b, double c)
{
    double sqrtVar = sqrt(pow(b, 2) - (4 * a * c));
    double eqPlus = (-b + sqrtVar)/(2 * a);
    double eqMinus = (-b - sqrtVar) / (2 * a);
    return "Your answers are " + to_string(eqPlus) + " and " + to_string(eqMinus);
}

我正在尝试使双变量 eqPlus 和 eqMinus 只有两个小数点。 我见过人们说要使用 setprecision() 但我只见过人们在 cout 语句中使用 function 并且在 class 中没有,因为我没有打印出一个字符串我正在返回一个。 那么我会在这里做什么呢? 我记得在学习一些 setiosflags() 方法之前,我能用它做些什么吗?

您可以使用stringstream而不是通常的std::coutsetprecision()

#include <iostream>
#include <string>
#include <sstream>
#include <iomanip>

std::string adjustDP(double value, int decimalPlaces) {
    // change the number of decimal places in a number
    std::stringstream result;
    result << std::setprecision(decimalPlaces) << std::fixed << value;
    return result.str();
}
int main() {
    std::cout << adjustDP(2.25, 1) << std::endl; //2.2
    std::cout << adjustDP(0.75, 1) << std::endl; //0.8
    std::cout << adjustDP(2.25213, 2) << std::endl; //2.25
    std::cout << adjustDP(2.25, 0) << std::endl; //2
}

但是,从 output 中可以看出,当value不能精确地表示为浮点二进制数时,这种方法会引入一些舍入误差。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM