相关疑难解决方法(0)

C++:如何将double舍入到int?

可能重复:
C++中float的round()

我有一个双(称为x),意味着55,但实际存储为54.999999999999943157,我刚才意识到.

所以,当我这样做

double x = 54.999999999999943157;
int y = (int) x;
Run Code Online (Sandbox Code Playgroud)

y = 54而不是55!

这困惑了我很久了.如何让它正确圆?

c++ floating-point rounding

88
推荐指数
4
解决办法
34万
查看次数

为什么round()和ceil()不返回整数?

有一段时间,我发现自己舍入了一些数字,我总是要将结果转换为整数:

int rounded = (int) floor(value);
Run Code Online (Sandbox Code Playgroud)

为什么所有舍入函数(ceil(),floor())都返回一个浮点数,而不是一个整数?我发现这非常不直观,并且希望得到一些解释!

c c++ casting rounding

59
推荐指数
2
解决办法
2万
查看次数

将`std :: floor()`和`std :: ceil()`转换为整数类型总能得到正确的结果吗?

我是偏执狂,其中一个函数可能会给出一个不正确的结果:

std::floor(2000.0 / 1000.0) --> std::floor(1.999999999999) --> 1
or
std::ceil(18 / 3) --> std::ceil(6.000000000001) --> 7
Run Code Online (Sandbox Code Playgroud)

可以这样的事情发生吗?如果确实存在这样的风险,我打算使用以下功能以便安全地工作.但是,这真的有必要吗?

constexpr long double EPSILON = 1e-10;

intmax_t GuaranteedFloor(const long double & Number)
{
    if (Number > 0)
    {
        return static_cast<intmax_t>(std::floor(Number) + EPSILON);
    }
    else
    {
        return static_cast<intmax_t>(std::floor(Number) - EPSILON);
    }
}

intmax_t GuaranteedCeil(const long double & Number)
{
    if (Number > 0)
    {
        return static_cast<intmax_t>(std::ceil(Number) + EPSILON);
    }
    else
    {
        return static_cast<intmax_t>(std::ceil(Number) - EPSILON);
    }
}
Run Code Online (Sandbox Code Playgroud)

(注意:我假设给定的'long double'参数适合'intmax_t'返回类型.)

c++ math arithmetic-expressions floating-accuracy

16
推荐指数
1
解决办法
3432
查看次数

为什么 std::round 提供返回 long 和 long long 的版本,而 std::floor、std::ceil、std::trunc 则不提供?

我正在 cppreference 中查看这些相关的标准函数系列:std::roundstd::floor和。std::ceilstd::trunc

有什么理由为什么std::round是唯一一个提供特定签名longlong long作为返回类型的吗?我正在努力思考除了历史之外的任何原因,但std::round最近才在 C++11 中添加了这一点。

c++ c++11

10
推荐指数
1
解决办法
377
查看次数

如何在C++中将int或long提升为幂

琐碎的问题:我只是想知道,如果一个人想要提高一个int或一个long来强制另一个int或long,

(long)std::pow((double)a,(double)b)
Run Code Online (Sandbox Code Playgroud)

足够,或者我需要

(long)(0.5 + std::pow((double)a,(double)b))
Run Code Online (Sandbox Code Playgroud)

c++ pow

4
推荐指数
1
解决办法
3368
查看次数