【问题标题】:shortest funtion c++ of rounding a float number舍入浮点数的最短函数c ++
【发布时间】:2015-07-21 09:46:22
【问题描述】:

这个函数的最短形式是什么(不改这个名字)?

int NearestInteger(float N) 
{
    return round(N);
}

【问题讨论】:

  • 你听说过谷歌吗?
  • 我什么也没找到!
  • @Vasiu:您的要求与答案here中的功能有什么不同吗?
  • @Tony D:只有返回类型不同。
  • 不正是你写它的方式吗?为什么你认为有一个更短的版本?为什么你认为你需要一个?

标签: c++ rounding short


【解决方案1】:

如果你有 C++11,你可以使用std::round 函数。

否则,您可能需要使用其中之一,具体取决于您的要求std::floorstd::ceil

【讨论】:

    【解决方案2】:

    如果你没有 C++11,你可以这样做:

    int NearestInteger(float N) {
        return int(floor(N + 0.5f));
    }
    

    但是,对于大型浮点数,它可能无法正常工作。首先,如果您的号码不适合int,任何垃圾都可以退回。其次,对于大于 2^24 的数字,它可能会返回错误的结果,因为not each integer is exactly representable in single precision float number

    【讨论】:

    • “如果截断的值无法在目标类型中表示,则行为未定义。” per 4.9/1 [conv.fpint]
    • @TonyD 是的,你是对的。调用者必须担心溢出。
    猜你喜欢
    • 2015-05-23
    • 1970-01-01
    • 1970-01-01
    • 2020-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-07
    相关资源
    最近更新 更多