在Python中,我有:
>>> mac_string = "68:a8:6d:0b:90:46"
>>> mac_int = int((mac_string).replace(":", ""), 16)
>>> print(mac_int)
115072593268806
在Lua,我有:
> mac_string = "68:a8:6d:0b:90:46"
> mac_int = tonumber(mac_string:gsub(':',''),16)
> print(mac_int)
1.1507259326881e+14
为什么相差4?你知道吗
在luaversion5.2之前,Luanumber类型使用浮点表示,而Python使用的实际整数只受内存限制。从Lua 5.2 documentation:
请注意,数字仍然足够精确,但在显示时是四舍五入的。如果在Python中将结果整数转换为float(它也使用双精度浮点),则可以看到相同的数字:
第二行的格式和Lua一样编号;小数点后有13位数字,使用科学记数法。你知道吗
您可以告诉Lua使用^{} 使用不同的格式打印数字:
我看到lua5.3expanded the number type to support 64-bit integers,所以升级到该版本也许可以解决这个问题。你知道吗
您可能正在使用Lua5.2或更低版本。C中的数字类型默认为
double
类型。print
的默认格式没有足够的精度。你知道吗Lua5.3支持整数子类型,默认情况下为64位。相同代码输出的结果:
默认情况下,lua5.1总是将数字存储为64位浮点值。
tostring
使用科学符号来打印非常大或非常小的值。你知道吗如果使用
string.format
格式化数字,则可以获得所有数字:相关问题 更多 >
编程相关推荐