舍入浮点数的最短函数c ++

Posted

技术标签:

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

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

int NearestInteger(float N) 

    return round(N);

【问题讨论】:

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

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

否则,您可能需要使用其中之一,具体取决于您的要求std::floor 或std::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 是的,你是对的。调用者必须担心溢出。

以上是关于舍入浮点数的最短函数c ++的主要内容,如果未能解决你的问题,请参考以下文章

C中的printf如何对浮点数进行舍入?

C 语言 哪个函数可以把 浮点数转换成字符串 带小数点 怎么做

使用 0.5 规则舍入浮点数的方法

Python Ctypes,C++ 字符串到浮点数的转换在 python 中调用 Matplotlib 后给出错误/舍入的结果

用 f 字符串舍入浮点数 [重复]

舍入浮点数,然后转到语言环境字符串