1.String To Number
- 针对字符串的所有算数操作会尝试将字符串转换为数值。
- lua5.3没有实现强制类型转换与整型的集成,而是采用了另一种更简单和快速的实现方式: 算术运算的规则就是只有在两个操作数都是整型时结果才是整型,因此,由于字符串不是整型值,所以任何参与算术运算的字符串都会被当作浮点运算处理。
- 可以使用函数tonumber显示地将一个字符串转换成数值。默认情况下,tonumber函数使用的是十进制,但是也可以对第一个参数指明使用任意进制:
例如: tonumber(“100101”,2) --> 37
2.Number To Number
- 调用函数tostring可以将数值转换为字符串
print(tostring(10) == "10") --> true
- 这种转换总是有效的,但是这种转换并不能控制输出字符串的格式(例如,结果中十进制数字的个数)
3.int To float
- 可以通过增加0.0的方法整型值转换为浮点型
print(-3 + 0.0) --> -3.0
-
缺点:对于绝对值超过2^53(9007199254740992)的整型值而言可能导致精度损失
print(9007199254740991 + 0.0 == 9007199254740991) -> true print(900719925740993 + 0.0 == 900719925470993) --> false
4.float To int
-
可以通过与零进行按位或运算,可以把浮点型值强制转换为整型值:
2^53 --> 9.007199254741e+15(浮点型) 2^53 | 0 --> 9007199254740992 (整型值)
-
缺点:将浮点型值强制转为为整型值时,lua语言会检查数值是否与整型值表示完全一致。条件:即没有小数部分且值在整型值的表示范围内。不满足条件会抛出异常
3.2 | 0 --小数部分 stdin:1: number has no integer reoresentation
2^64 | 0 --超出范围 -
可以通过使用函数math.tointeger将数值强制转换为整型值。