根据参数

时间:2017-04-19 13:17:21

标签: c++ math

是否有直接函数来设置数字的小数。例如,我得到3.14341 我的参数是2,所以我得到3.14。有一个函数setprecision但它只打印结果。另外,我制作了这样的算法:

std::string fixPrecision(std::string const& value, int digits)
{
    std::string num = value;
    float temp = std::stof(num);
    float  fractpart, intpart;
    fractpart = modf(temp, &intpart);
    int a = (int)(fractpart * pow(10,digits));
    double last = intpart + a*(pow(0.1 , digits));
    return std::to_string(last);
}

效果很好。我得到了我想要的但我必须将其转换为字符串,因此结果是123.120000而不是123.12

我可以肯定在这里使用一些帮助。提前谢谢。

编辑:这不是一个重复的问题,因为我的函数需要取整数并返回字符串格式的数字。再次感谢。

2 个答案:

答案 0 :(得分:0)

傻瓜,我。答案很简单。我做了很多不必要的事......

 std::string fixPrecision(std::string const& value, int digits)
 {
     auto pos = value.find(".");
     if(pos != std::string::npos)
     return value.substr(0, pos+digits+1);
     return value;
 }

答案 1 :(得分:-1)

不完全正确,但您可以使用 std :: setprecision

设置精度

定义一个方法:

void printWithPrecision(const double value, unsigned decimalPlaces)
{
    std::cout << "A Double with " << decimalPlaces <<" decimal places: "<<std::setprecision(decimalPlaces) << value << std::endl;
}

并称之为:

double d = 7987.12354689765416;

for (auto x = 0; x<10; x++)
{
    printWithPrecision(d, x);
}

别忘了包含输入输出操纵器:

#include <iomanip>