Lua significant figures

时间:2016-09-01 06:29:25

标签: lua numbers number-formatting significant-digits

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

2 个答案:

答案 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