惯例

简介: 惯例

我们可以简单的通过增加 0.0 的方法将整型值强制转换为浮点型值,一个整型值总是可以被转换成浮点型值

> -3 + 0.0                      --> -3.0
> 0x7fffffffffffffff + 0.0      --> 9.2233720368548e+18


小于253的所有整型值的表示与双精度浮点型值的表示一样,对于绝对值超过这个值的整型值而言,在将其强制转换为浮点型值时可能导致精度损失:

> 9007199254740991 + 0.0 == 9007199254740991        --> true
> 9007199254740992 + 0.0 == 9007199254740992        --> true
> 9007199254740993 + 0.0 == 9007199254740993        --> false


在最后一行中,253 + 1的结果被取整为253,打破了等式,表达式结果为 false

通过与零进行按位或运算,可以把浮点型值强制转换位整型值:

> 2^53          --> 9.007199254741e+15  (浮点型值)
> 2^53 | 0      --> 9007199254740992    (整型值)


在将浮点型值强制转换位整型值时, Lua 语言会检查数值是否与整型值表示完全一致,即没有小数部分且其值在整型值的表示范围内,如果不满足条件则会抛出异常:

> 3.2 | 0         --小数部分
stdin:1: number has no integer representation
> 2^64 | 0        --超出范围
stdin:1: number has no integer representation
> math.random(1, 3.5)  
stdin:1: bad argument #2 to 'random' (number has no integer representation)   --数值没有用整数表示点击复制复制失败已复制


对小数进行取整必须显示地调用取整函数。


另一种把数值强制转换为整型的方式是使用函数 math.tointeger ,该函数会在输入参数无法转换为整型值时返回 nil

> math.tointeger(-258.0)    --> -258
> math.tointeger(2^30)      --> 1073741824
> math.tointeger(5.01)      --> nil           (不是整数值)
> math.tointeger(2^64)      --> nil           (超出范围)


这个函数在需要检查一个数值能否被转换成整型值时尤为有用。例如,以下函数在可能时会将输入参数转换为整型值,否则保持原来的值不变:

function cond2int(x)
  return math.tointeger(x) or x
end
目录
相关文章
|
Shell
Shell 字符串操作(截取、替换、去头、去尾)
Shell 字符串操作(截取、替换、去头、去尾)
1125 0
|
缓存 API 开发工具
几款优秀的点播、RTSP/RTMP直播播放器介绍
介绍:Ijkplayer 是Bilibili发布的基于 FFplay 的轻量级 Android/iOS 视频播放器。实现了跨平台功能,API 易于集成;编译配置可裁剪,方便控制安装包大小;支持硬件加速解码,更加省电;提供 Android 平台下应用弹幕集成的解决方案。
2486 0
|
缓存 Linux Shell
Python 虚拟环境 看这一篇就够了
Python 虚拟环境 看这一篇就够了
4313 0
Python 虚拟环境 看这一篇就够了
|
NoSQL MongoDB 关系型数据库
13个Mongodb GUI可视化管理工具,总有一款适合你
本文介绍了13个好用的MongoDB可视化工具。Robomongo,MongoDB Compass,phpMoAdmin等
111556 0
13个Mongodb GUI可视化管理工具,总有一款适合你
|
图形学 Python 容器
【PyQt5桌面应用开发】3.Qt Designer快速入门(控件详解)
【PyQt5桌面应用开发】3.Qt Designer快速入门(控件详解)
2525 0
|
容器
RT-Thread快速入门-事件集
RT-Thread快速入门-事件集
231 0
|
消息中间件 算法 编译器
RT-Thread快速入门-了解内核启动流程
RT-Thread快速入门-了解内核启动流程
260 0
|
机器学习/深度学习 并行计算 计算机视觉
了解FastSam:一个通用分割模型(草记)(2)
2 Sam相关项目 阅读:Segment Anything(sam)项目整理汇总 新鲜名词:点云分割, 有趣的项目:
512 0
|
编译器 Python
Python 完美解决 Import "模块" could not be resolved ...
Python 完美解决 Import "模块" could not be resolved ...
508 0