如何使用stringstream打印双倍数字点后的 max 小数位数(没有尾随零和没有舍入)?例如,如果我只想打印最多5位小数:
1 -> 1
1.23 -> 1.23
1.234 -> 1.234
1.2345 -> 1.2345
1.23456 -> 1.23456
1.234567 -> 1.23456
1.2345678 -> 1.23456
1230.2345678 -> 1230.23456 <- Demonstrating that I am not talking about significant digits of the whole number either
等
在我看到的所有工具(setw,setprecision,fixed等)中,我似乎无法想出这个。谢谢!
答案 0 :(得分:1)
您是否绝对想要使用stringstream
选项执行此操作?
您可以像这样编写round
函数:
double round(double n, int digits) {
double mult = pow(10, digits);
return floor(n*mult)/mult;
}
然后只需打印round(1.2345678, 5)
。
答案 1 :(得分:0)
没有内置方法可以做到这一点(据我所知)。但是,如下所述的黑客攻击是可能的:
void print_with_places(double num, unsigned places) {
for (double i = 1; i < num; i*=10) { //have to use a double here because of precision...
++places;
}
std::cout << std::setprecision(places) << num;
}
它不是最准确的,但它是或者将它打印到字符串然后操纵字符串。