6

如何让我的程序输出一个数字,在小数点 C++ 后面至少有一个数字?输出:1 = 1.0 或 1.25 = 1.25 或 2.2 = 2.2 或 3.456789 = 3.456789

提前致谢

4

4 回答 4

5

用于showpoint强制打印小数点

double x = 1.0;
std::cout << std::showpoint << x << "\n";

后面是0满足流精度所需的数量。

于 2013-09-05T21:22:13.533 回答
3
#include <cmath>
#include <iostream>
#include <limits>

struct FormatFloat
{
    static constexpr const double precision = std::sqrt(std::numeric_limits<double>::epsilon());
    const double value;
    FormatFloat(double value) : value(value) {}
    void write(std::ostream& stream) const {
        std::streamsize n = 0;
        double f = std::abs(value - (long long)value);
        while(precision < f) {
            f *= 10;
            f -= (long long)f;
            ++n;
        }
        if( ! n) n = 1;
        n = stream.precision(n);
        std::ios_base::fmtflags flags = stream.setf(
            std::ios_base::fixed,
            std::ios_base::floatfield);
        stream << value;
        stream.flags(flags);
        stream.precision(n);
    }
};

inline std::ostream& operator << (std::ostream& stream, const FormatFloat& value) {
    value.write(stream);
    return stream;
}

inline FormatFloat format_float(double value) {
    return FormatFloat(value);
}

int main()
{
    std::cout
        << format_float(1) << '\n'
        << format_float(1.25) << '\n'
        << format_float(2.2) << '\n'
        << format_float(3.456789) << std::endl;
    return 0;
}
于 2013-09-06T07:39:55.970 回答
1

如果你要经常调用这个函数,那么这可能不是你要找的,因为这不是最好的方法,但它确实有效。

类似于以下内容:

string text = to_string(55);
if (text.find(".") != std::string::npos) {
    cout << "No digit added after decimal point" << text;
}
else
{
    cout << "Digit added after decimal point" << text << ".0";
}
于 2013-09-05T21:03:46.620 回答
0
double value = ...;
std::ostringstream ss;
ss.precision(std::numeric_limits<double>::digits10 + 2);
ss << value;
std::string s = ss.str();
if (s.find('.') == string::npos)
{
    s.append(".0");
}

或者

double value = ...;
std::wostringstream ss;
ss.precision(std::numeric_limits<double>::digits10 + 2);
ss << value;
std::wstring s = ss.str();
if (s.find(L'.') == string::npos)
{
    s.append(L".0");
}
于 2013-10-28T09:23:41.987 回答