四舍五入到最近的奇数位。
2014-1-7 22:25:30
收藏:0
阅读:149
评论:3
我想将一些数字四舍五入到最近的十分位,只使用奇数十分位。例如:
91.15 -> 91.1
91.21 -> 91.3
有没有一个简单而通用的方程可以做到这一点?
点赞
用户869951
如何
function roundToOdd(number)
temp = math.floor(number * 10 + 0.5)
if temp % 2 == 0 then
-- 第一位小数是偶数,需要决定是“向上”还是“向下”“舍入”
if number > temp/10 then
-- 更接近下一个奇数数字 “向上”
temp = temp + 1
else
-- 更接近下一个奇数数字 “向下”
temp = temp - 1
end
end
return temp/10
end
for n=1, 2, 0.09 do
local result = roundToOdd(n, 0.2, 0.1)
print(string.format("%.2f : %g", n, result))
end
print(91.15,roundToOdd(91.15))
print(91.21,roundToOdd(91.21))
结果:
1.00 : 0.9
1.09 : 1.1
1.18 : 1.1
1.27 : 1.3
1.36 : 1.3
1.45 : 1.5
1.54 : 1.5
1.63 : 1.7
1.72 : 1.7
1.81 : 1.9
1.90 : 1.9
1.99 : 1.9
91.15 91.1
91.21 91.3
2014-01-07 23:07:58
用户5670219
首先让我们回答一个问题,如何快速高效地找到最近的奇整数,而不需要分支和比较。然后,该公式可以通过在变换之前先将其乘以10的幂次,然后再通过同样的10的幂次除以它(再转换回浮点数)来扩展到上述问题,例如:最近的奇数十分位为10,最近的奇数百分位为100等。
如果您正在使用具有截断除法和位移运算符支持的语言,如Java或C++,请使用此一行公式:
// Java : with bit-shift
static int nearestOdd(float num) {
return 1 + (((int)(num + 1.0f) - 1) & 0xFFFFFFFE);
}
// Java : without bit-shift.
static int nearestOdd(float num) {
return 1 + 2 * (((int)(num + 1.0f) - 1) / 2);
}
在C++中:
// C++
int nearestOdd(float num) {
return 1 + ((static_cast<int>(num + 1.0f) - 1) & 0xFFFFFFFE);
}
2022-12-31 13:48:23
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
这不是四舍五入到最近十分位,而是四舍五入到最近的五分位(两个十分位)并加上一个十分位的偏移量。因此,通用的方程式如下:
# 在任何一个 round 函数四舍五入的编程语言中都适用 radioStation = round( (original-offset)/interval ) * interval + offset在 Lua 中的实现如下:
-- number: 要四舍五入的原始值 -- interval: 期望值之间的距离 -- offset: 值的可选偏移量 function roundToNearest( number, interval, offset ) offset = offset or 0 -- 默认值 interval = interval or 1 -- 默认值 return math.floor( (number-offset)/interval + 0.5 ) * interval + offset end for n=1, 2, 0.09 do local result = roundToNearest(n, 0.2, 0.1) print(string.format("%.2f : %g", n, result)) end --> 1.00 : 1.1 --> 1.09 : 1.1 --> 1.18 : 1.1 --> 1.27 : 1.3 --> 1.36 : 1.3 --> 1.45 : 1.5 --> 1.54 : 1.5 --> 1.63 : 1.7 --> 1.72 : 1.7 --> 1.81 : 1.9 --> 1.90 : 1.9 --> 1.99 : 1.9