Lua 有效数字
Posted
技术标签:
【中文标题】Lua 有效数字【英文标题】:Lua significant figures 【发布时间】:2016-09-01 06:29:24 【问题描述】:我正在尝试制作一个函数,将数字四舍五入到用户给出的一定数量的有效数字,例如,如果用户给我数字
234.235534 有 5 个有效数字,函数应返回 234.24
【问题讨论】:
【参考方案1】:我认为您正在寻找 [fs]?printf
's %g
修饰符。
将浮点数转换为十进制或十进制指数表示法 取决于值和精度。
其中,精度定义为:
.
后跟整数或*
,或者两者都不指定 转换的精度。在使用*
的情况下, 精度由int
类型的附加参数指定。如果 此参数的值为负数,将被忽略。如果既不是数字 也没有使用*
,精度为零。
所以,你想要:
> return ("%.5g"):format(234.235534)
234.24
> return ("%.6g"):format(x)
234.236
【讨论】:
【参考方案2】:我不是一个程序员,但在对人们在 lua 中推荐的其他舍入函数感到失望后,我想出了这个供我自己使用。这应该符合您的要求。
function sigFig(num,figures)
local x=figures - math.ceil(math.log10(math.abs(num)))
return(math.floor(num*10^x+0.5)/10^x)
end
现在就有效数字而言,它不会向数字添加额外的零来表示精度。例如:
sigFig(234.235534,5)
将产生234.24
sigFig(234.0000001,6)
将产生 234.0
,而不是 234.000
【讨论】:
以上是关于Lua 有效数字的主要内容,如果未能解决你的问题,请参考以下文章