数值常量

简介: 数值常量

Lua 语言中,数值有两种表示方式,即常规表示方式和科学计数法表示方式。


科学计数法的表示方式为:一个可选的十进制部分外加一个可选的十进制指数部分

> 4           --> 4
> 0.4         --> 0.4
> 4.57e-3     --> 0.00457
> 0.3e12      --> 300000000000.0
> 5E+20       --> 5e+20

具有十进制小数或者指数的数值会被当做浮点型值,否则会被当做整型值。


整型值和浮点型值的类型都是 number

> type(3)         --> number
> type(3.5)       --> number
> type(3.0)       --> number

由于整型值和浮点型值的类型都是 number ,所以他们是可以相互转换的。同时,具有相同算数值的整型值和浮点型值在 Lua 语言中是相等的。


思考

在很多语言中浮点型和整型的存储方式是不同的,所以一般也是不相等的,那么 Lua 中是如何存储的,又为什么会判定为相等呢?

> 1 == 1.0          --> true
> -3 == -3.0        --> true
> 0.2e3 == 200      --> true


在少数情况下,当需要区分整型值和浮点型值的时候,可以使用函数 math.type() 来判断,如下所示:

> math.type(3)      --> integer
> math.type(3.0)    --> float


Lua5.3 中:

> 3         --> 3
> 3.0       --> 3.0
> 1000      --> 1000
> 1e3       --> 1000.0


十六进制常量

Lua 语言像其他语言一样,也支持以 0x 开头的十六进制常量。同时,与很多编程语言不同的是:Lua语言还支持十六进制的浮点数,这种十六进制浮点数由小数部分和以 pP 开头的指数部分组成。如下所示:

> 0xff        --> 255
> 0x1A3       --> 419
> 0x0.2       --> 0.125
> 0x1p-1      --> 0.5
> 0xa.bp2     --> 42.75


提示

十六进制小数是从 Lua5.2 开始被引入。


可以使用%a参数,通过函数string.format()对这种格式进行格式化输出:

> string.format("%a", 419)      --> 0x1.a3p+8
> string.format("%a", 0.1)      --> 0x1.999999999999ap-4

虽然这种格式很难阅读,但是这种格式可以保留所有浮点数的精度,并且比十进制的转换速度更快

目录
相关文章
|
7月前
|
存储 C++
C++的变量和常量
C++的变量和常量
41 1
|
7月前
整数常量
整数常量。
45 0
|
6月前
|
C++
C++之变量与常量
C++之变量与常量
|
7月前
浮点变量值为1.000000和1.0常量比较相等吗?
浮点变量值为1.000000和1.0常量比较相等吗?
47 0
|
7月前
|
SQL 关系型数据库 MySQL
7. 数值函数
7. 数值函数
|
7月前
将整数转换为枚举
将整数转换为枚举。
42 2
|
7月前
1-5 运算量 变量 和 常量
1-5 运算量 变量 和 常量
37 0
|
编译器 C语言
【常量与变量的一些基本理解】
【常量与变量的一些基本理解】
81 0
变量、常量
c语言学习的第二弹