【问题标题】:C++ how to show exact digits of fraction partC ++如何显示小数部分的确切数字
【发布时间】:2013-10-02 12:20:32
【问题描述】:

在 C++(或 boost lib)中有什么方法可以显示给定数字的小数部分?但我不想在小数部分打印尾随 0(例如1.0001.500)。看这个案例:

cout << std::setprecision(3) << 5.0/7.0 << endl;    //  0.714
cout << std::setprecision(3) << 12.0/7.0 << endl;   //  1.71
cout << std::setprecision(3) << 7.0/7.0 << endl;    //  1
cout << std::setprecision(3) << 10.5/7.0 << endl;   //  1.5

问题是 setprecision 以不同方式打印第 1 行和第 2 行,我希望这两行都打印 0.7141.714。并且仍然保留第 3 行和第 4 行 11.5

【问题讨论】:

  • 使用固定精度标志 std::fixed 得到精确的 3 位小数部分,然后将其转换为双精度/浮点数,并将其转换回字符串以消除尾随零也可以实现目标.但是没有干净的方法吗?

标签: c++ iomanip boost-format


【解决方案1】:

比如:

#include <cmath>
using namespace std;

cout << setprecision(ceil(log10(floor(x))+3) << x;

不是很快,但我们的想法是计算出 x 的整数部分需要多少位数,然后将您感兴趣的小数位数添加到其中。如果你真的很认真,你甚至可以编写自己的操纵器来做到这一点。

【讨论】:

    猜你喜欢
    • 2013-06-08
    • 2019-04-25
    • 2021-08-01
    • 2017-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 2022-09-26
    相关资源
    最近更新 更多