如何在大型C ++程序中为所有双精度数使用设置小数精度

时间:2011-12-11 00:52:27

标签: c++ floating-point double precision

如何在大型C ++程序中为所有double类型号使用设置小数精度。

我可以使用stringstreamsetprecision(n)来执行此操作,但我必须逐个为整个程序中的每个double号码执行此操作。

如何全局一次全局,以便程序中的所有double类型号在小数点后都有固定的十进制数字(例如4)?

我不想使用函数调用来导致调用开销。

感谢

2 个答案:

答案 0 :(得分:2)

double类型不是为了你想要的而设计的:它是一个浮动的十进制类型,而不是一个固定的十进制类型。你需要的是某种十进制类型,但遗憾的是C ++还没有这种类型。

它可以使用整数类型模拟大多数时间,您可以假设它代表单位的千分之一。您只需要在乘法和除法中小心以确定比例。增加和减少会自动进行。

答案 1 :(得分:0)

setprecision不会改变double值的精度,只会改变转换为字符串时使用的精度。

将双精度转换为字符串是相对昂贵的操作,因此单个额外函数调用的开销应该可以忽略不计。如果在性能关键代码中使用双字符串转换,那么你做错了。

我的建议是写一个函数,如:

std::string FmtDbl(double d)
{
    std::ostringstream os;
    os << std::setprecision(4) << d;
    return os.str();
}

在任何需要转换的地方使用该功能。