舍入浮点数的最短函数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 语言 哪个函数可以把 浮点数转换成字符串 带小数点 怎么做
Python Ctypes,C++ 字符串到浮点数的转换在 python 中调用 Matplotlib 后给出错误/舍入的结果