如何在大型C ++程序中为所有double
类型号使用设置小数精度。
我可以使用stringstream
和setprecision(n)
来执行此操作,但我必须逐个为整个程序中的每个double
号码执行此操作。
如何全局一次全局,以便程序中的所有double
类型号在小数点后都有固定的十进制数字(例如4
)?
我不想使用函数调用来导致调用开销。
感谢
答案 0 :(得分:2)
double
类型不是为了你想要的而设计的:它是一个浮动的十进制类型,而不是一个固定的十进制类型。你需要的是某种十进制类型,但遗憾的是C ++还没有这种类型。
它可以使用整数类型模拟大多数时间,您可以假设它代表单位的千分之一。您只需要在乘法和除法中小心以确定比例。增加和减少会自动进行。
答案 1 :(得分:0)
setprecision
不会改变double值的精度,只会改变转换为字符串时使用的精度。
将双精度转换为字符串是相对昂贵的操作,因此单个额外函数调用的开销应该可以忽略不计。如果在性能关键代码中使用双字符串转换,那么你做错了。
我的建议是写一个函数,如:
std::string FmtDbl(double d)
{
std::ostringstream os;
os << std::setprecision(4) << d;
return os.str();
}
在任何需要转换的地方使用该功能。