惯例

简介: 惯例

我们可以简单的通过增加 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
目录
相关文章
|
16天前
|
开发者 Python
【干货】Python编程惯例
【干货】Python编程惯例
16 1
|
27天前
|
API C语言 开发者
C语言中抽象函数与具体实现的命名与组织
在C语言的嵌入式系统和开源软件开发中,良好地处理抽象函数与实现对于代码质量至关重要。建议将API作为接口定义操作,使用函数指针实现动态替换。避免使用`Impl`后缀,推荐用`Callback`或`Handler`表示具体实现。回调函数用于异步事件处理,通过指针传递。示例展示了C语言中函数指针的用法,嵌入式项目常通过目录结构区分平台相关代码。清晰的命名和组织能提升代码可读性和团队协作效率。
|
程序员 C++
编程命名规则
编程命名规则
|
IDE 程序员 开发工具
世界上第一个程序员命名的编程语言是什么?
Ada曾是美国国防部指定的唯一一款可用于军用系统开发的语言,旨在整合美军事系统中运行着450多种不同的程序设计语言,她是迄今为止最复杂、最完备的软件工具。开发始于1975年,最早是针对嵌入式和实时系统设计的,1983年发布。其命名是为了纪念世界上第一位程序员阿达·洛芙莱斯。Ada具有许多现代软件的开发原理,而且将这些原理进行实现他可以改善软件系统的清晰性、可靠性、有效性、可维护性。
359 0
|
前端开发 JavaScript 算法
你真的会代码命名吗 ? 优雅学会《如来神掌》 再也不怕不知道如何命名啦!
你真的会代码命名吗 ? 优雅学会《如来神掌》 再也不怕不知道如何命名啦!
205 0
你真的会代码命名吗 ? 优雅学会《如来神掌》 再也不怕不知道如何命名啦!
|
程序员 C语言 Windows
编程规范(一)变量命名
编程规范(一)变量命名
|
Java 程序员 索引
Python私有化及_下划线命名用途
Python中没有真正的私有属性或方法,没有真正的私有化,但有一些和命名有关的约定,让编程人员处理一些需要私有化的情况,我们常常需要区分私有方法、属性和公有方法、属性以方便管理和调用。那么在Python中如何做呢?
|
消息中间件 存储 监控
好好写代码之命名篇——推敲
好好写代码之命名篇——推敲
88 0
|
IDE 开发工具
代码重构之神秘命名
聊聊代码中关于命名的重构手段
代码重构之神秘命名

热门文章

最新文章