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 有效数字的主要内容,如果未能解决你的问题,请参考以下文章

lua可以对单个字符和数字之间进行转换吗

LUA,多个数字字符串到数字

试图比较 Lua 中一张表的所有条目

从文本文件 lua 中解析科学数字

Lua-阿拉伯数字转中文大写数字

Lua - 字符串行为的数字