我如何在Lua中打印一个巨大的数,而不使用科学计数法?
我正在处理 Lua 中的时间戳,它们显示自纪元以来的微秒数(例如“1247687475123456”)。
我真的很想能够以其所有可怕的荣耀打印该数字,但 Lua 坚持用科学计数法打印它。我已经彻底搜索了有关打印格式化字符串的可用文档,但唯一可用的命令是“科学计数法打印(%e /%E)”和“如果数字非常长,则自动以科学计数法打印(%g)”。没有选项似乎可以将数字打印成正常形式。
我知道我可以编写一个函数,将原始数字取做一些除法并循环打印数字,但那似乎是一种不优雅的麻烦方法。肯定有一种内置于语言中的方法可以做到这一点吧?
原文链接 https://stackoverflow.com/questions/1133639
Lua通常配置使用平台的常规双精度浮点格式来存储所有数字。对于今天的大多数桌面平台,这将是64位IEEE-754格式。常规智慧认为,范围在-1E15到+1E15之间的整数可以安全地假定被准确表示。
无论如何,string.format()
函数通过(做一些微小的调整)传递其参数给平台对printf()
的实现。 printf()
理解的格式字符串包括 %e
和 %E
来强制使用"科学"符号,以及 %f
来强制使用简单的十进制符号。此外,%g
和 %G
选择最短的符号。
例如:
E:\...>lua
Lua 5.1.4 版权所有(c) 1994-2008 Lua.org, PUC-Rio
> a = 1e17/3
> print(string.format("%f",a))
33333333333333332.000000
> print(string.format("%e",a))
3.333333e+016
> print(string.format("%.0f",a))
33333333333333332
请注意,如果值在32位有符号整数范围内,则还可以使用%d
格式。但是,如果该值超出了该范围,则结果未定义。以微秒为单位的系统时间戳可能超出32位范围。
如果16个十进制数字的精度不够高,则有几种选择可用于增加精度。
首先,将真正的64位整数打包在 userdata
中并配备适当的算术元方法并不困难。这经常在 Lua邮件列表 中讨论,但我不记得有谁发布了完成的模块。
其次,Lua的作者之一发布了两个支持任意精度算术的模块:lbc和lmapm。两者都可以在该页面找到。
第三,谷歌的随意搜索可以轻松地找到几个其他数学库的包装。
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
> print(string.format("%18.0f",1247687475123456))
输出结果为:1247687475123456