I'm trying to make a function that rounds a number up to a certain number of significant figures given by the user, for example if the user gives me the number
234.235534 with 5 significant numbers, the function should return 234.24
答案 0 :(得分:2)
我认为您正在寻找[fs]?printf
's %g
修饰符。
将浮点数转换为十进制或十进制指数表示法 取决于价值和精确度。
其中, precision 由以下内容定义:
.
后跟整数或*
,或两者都没有指定 转换精度。在使用*
的情况下, precision由类型为int
的附加参数指定。如果 这个参数的值是负数,它被忽略了。如果不是一个数字 使用了*
,精度为零。
所以,你想要:
> return ("%.5g"):format(234.235534)
234.24
> return ("%.6g"):format(x)
234.236
答案 1 :(得分:1)
我不是一个程序员,但是在我对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