Vio*_*ffe 3 c++ stringstream number-formatting
我想将double转换为字符串,在点之后舍入到2位小数.我希望1.009表示为"1.01",1.0表示为"1".这就是我尝试过的:
std::ostringstream oss;
oss << std::fixed << std::setprecision(2) << std::noshowpoint << 1.0;
Run Code Online (Sandbox Code Playgroud)
它输出"1.00",即使我从未设置宽度甚至指定std::noshowpoint.如何实现理想的表示?
最佳方案:
inline double twodec(double n) { return floor(n * 100 + 0.5) / 100; }
oss << twodec(1.0) << ' ' << twodec(1.009);
Run Code Online (Sandbox Code Playgroud)
讨论
来自http://www.cplusplus.com/reference/ios/fixed/(italics mine)
当floatfield设置为fixed时,浮点值将使用定点表示法写入,这意味着该值在精度字段指定的馏分部分中使用完全相同的数字表示,并且没有指数部分.
所以,"修复"不会起作用.
也就是说,我能想到做你想做的事的唯一方法是:
floor(n * 100 + 0.5) / 100),然后使用默认表示(即不指定固定或科学或精确 - 如果fixed或scientific有效,首先清除它们std::cout.unsetf(std::ios::floatfield)).ostringstream,然后删除尾随0和任何'.' (非常可怕).| 归档时间: |
|
| 查看次数: |
3624 次 |
| 最近记录: |