为何Lua执行print(8/2)输出4.0而非4?技术疑问
为什么Lua中
print(8/2)输出4.0而不是4? 这个问题跟精度完全没关系,你说得对——8、2、4在二进制浮点数里都能精确表示,问题出在Lua的数值类型设计和print函数的输出规则上,我给你慢慢捋清楚:
1. Lua的除法操作符/始终返回浮点数
不管你用整数还是浮点数做除法,Lua里的/操作符都会返回一个浮点数类型的结果,哪怕这个结果刚好是整数。比如8/2计算后得到的是值为4的浮点数(也就是4.0),而不是整数类型的4。
你可以用type()函数验证这一点:
print(type(8)) --> integer print(type(8/2)) --> float
2. math.floor()会返回整数类型
math.floor()的作用是向下取整,它接收一个浮点数,返回的是整数类型的结果。哪怕输入的是4.0,经过math.floor()处理后,就变成了整数类型的4:
print(type(math.floor(8/2))) --> integer
3. print()函数根据数值类型决定输出格式
Lua的print函数在输出数值时,会根据数值的具体子类型(integer/float)来选择显示格式:
- 如果是整数类型,就输出不带小数的整数形式
- 如果是浮点数类型,哪怕值刚好是整数,也会输出带
.0的浮点数格式
这就是为什么print(8/2)输出4.0,而print(math.floor(8/2))输出4的核心原因——完全是类型差异导致的输出格式不同,和精度、舍入没有半毛钱关系。
内容的提问来源于stack exchange,提问作者VortixDev
相关产品推荐
相关产品推荐

