如何打印在Lua一个庞大的数字,而无需使用科学记数法?

<p>我处理时间戳在Lu​​a显示时代以来(例如“1247687475123456”)的微秒数。 P&gt; </p><p>我的<em>真正 em&gt;的希望能够打印在其所有可怕的荣耀的数字,但Lua中坚持以科学计数法打印。我已经冲刷可用文档关于打印的格式化字符串,但唯一可用的命令是“打印在科学记数法(%E /%E)”和“科学记数法自动打印,如果数字是非常长(%G)” 。没有选项似乎可用来打印在正常形式的数量。 P&gt; <p>我意识到,我可以写,将采取原来的号码,由10做一些划分,并在一个循环打印数字的功能,但是这似乎是一个不雅的麻烦。肯定有这样做是内置在语言的某种方式? P&gt;
</p></em></p>

1116 浏览 1 回复
  gt   打印   lua   格式   科学  

回复

    <p> 1247687475123456 P&gt; </p><p> Lua的作为通常配置使用平台的通常双精度浮点格式来存储所有号码。对于的<em>最 em&gt;的今天桌面平台,这将是64位IEEE-754格式。的传统智慧是,在范围-1E15整数到+ 1E15可以安全地假定为代表没错。 p&gt; <p>在任何情况下,功能通过将其参数(有一些小的调整),以该平台的实施。通过了解格式字符串 包括 和 给力“科学”符号,并 给力纯十进制格式。此外, 和 选择最短的符号。 P&gt; </p><p>例如: P&gt; E:\ ...&gt;卢阿 LUA 5.1.4版权所有(C)1994-2008 Lua.org,市局 - 里约 &gt; A = 1e17 / 3 &gt;打印(的String.Format(“%F”,A)) 33333333333333332.000000 &gt;打印(的String.Format(“%E”,A)) 3.333333e + 016 &gt;打印(的String.Format(“%。0F”,A)) 33333333333333332 </p><p>请注意,当值的32位有符号整数范围内适合,你也可以使用 格式。然而,结果并不好,如果该值超过该范围限定。在微秒系统时间戳有可能超过32位范围。 P&gt; </p><p>如果16位十进制数不够精确,有可用于提高精确度几种选择。 P&gt; </p><p>首先,它不会是困难打包在一个真正的64位整数 随着一套合适的算术元方法的。这被在 Lua的邮件列表偶尔讨论,但我不记得看​​到完成模块由任何人释放。 p&gt; </p><p>二,Lua的作者之一发布了两个模块,支持高精度计算:的<a href="htt​​p://www.tecgraf.puc-rio.br/~lhf/ftp/lua/”相对=“nofollow "> LBC和lmapm 。两者都在这个页面找到。 P&gt; </p><p>三,在谷歌搜索随便轻易变成了其他几个数学函数库的封装。 P&gt;
    </p></em></p>

    朱滟滢

相关提问