ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

L04. number类型

2022-09-10 15:31:14  阅读:250  来源: 互联网

标签:输出 结果 -- 浮点数 L04 number print 类型 math


一. number类型

  1. Lua5.3 版本开始, Lua 语言为数值格式提供了两种选择 :integer( 整型 )和float(双精度浮点型 )[float不代表单精度类型 ] 

 

  2. 默认当成双精度浮点类型来运算的。也就是说number会底层当做double类型来处理,精度是16~17位

 

  3. 十进制

    ① 十进制表示方式

--十进制表示
local a = 2         --输出结果: 2
local b = 2.1       --输出结果: 2.1

     ② 十进制科学计数法表示方式(科学记数法的结果是一个浮点数)

 

--[[
    科学计数法规则:
        1. 数字后面加e或者E字符然后跟数值(数值不能省略) 表示科学计数法
        2. 数值的正数表示小数点后移,数值的负数表示小数点往前移
--]]

print(4.57e0)           --输出结果: 4.57
print(0.3e12)           --输出结果: 300000000000.0
print(0.3e+12)          --输出结果: 300000000000.0(与上面的表达式一样)
print(5.26E+20)         --输出结果: 526E+020(数值过大无法转换,但也能表示十进制数)

 

  4. 十六进制

    ① 以0x开头的十六进制常量, 不仅支持十六进制的整型、还支持十六进制的浮点数

--十六进制表示方式输出的结果是十进制
local e = 0xa2548   --输出结果: 9544
local f = 0x2.5     --输出结果: 2.3125
local g = 0xa.5     --输出结果: 10.3125

    ② 十六进制还可以由p或P开头的指数部分组成

 

--十六进制科学计数法表示输出结果是十进制
--p表示什么不必深究
local h = 0x2.ap3   --输出结果: 21.0
--通过string.format()的%a参数可以对上面的这种格式进行格式化的输出,格式化的意思是: 有格式
--虽然这种格式很难阅读,但是这种格式可以保留所有浮点数的精度,并且比十进制的转换速度更快
print(string.format("%a", 419))       --0x1.a3p+8
print(string.format("%a", 0.5))       --0x1p-1 
print(0x1.a3p+8)    --输出结果: 419

  5. 十六进制与十进制互转

--十六进制转十进制--一字节
print(0x01)       --输出结果: 1
print(0xFF)       --输出结果: 255
--二字节
print(0xFF01)     --输出结果: 65281
print(0xFFFF)     --输出结果: 65535
--四字节
print(0xA0AA0A)   --输出结果: 10529290
print(0xFFFFFF)   --输出结果: 16777215


--十进制转十六进制
local function dec(decnum)
local num = tonumber(decnum)
  if not num then return nil end
  if not math.type(num) == "integer" then return nil end
  local hex,dis,rem = "",num
  repeat
    dis, rem = math.modf(dis/16), math.fmod(dis,16)
    rem = rem > 9 and string.char(rem+55) or rem
    hex = rem .. hex
  until dis == 0
  return "0x" .. hex
end
print(dec(65535))

  5. math.type(参数), 判断是否为int或者float

--[[
    math.type判断是否是int或者float
    语法: 
        math.type(参数)
    功能: 
        判断是否是int或者float
    参数: 
        参数: 数值,不是数值返回nil
    返回值:
        字符串型, "integer", "float"
--]]

print(math.type(1))         --输出结果: intger
print(math.type(-1.5))      --输出结果: float

 

二. 算数运算符

  1. Lua支持的算术运算

    ① 加(+)、减(-)、乘(*)、除(/)

    ② 取负数(-)

    ③ 取整除法和floor除法(//)

    ④ 取余(%)

    ⑤ 指数运算(e和p)

    ⑥ 幂运算(^)

   2. 整型值和浮点型值之间的算术运算

      ① 在对一个字符串进行算术操作时,Lua会尝试将这个字符串转换为一个数字来进行算数操作(结果是浮点数)

        ② 当两个操作数的类型不同时,运算之前会先将整型值转换为浮点型值

print(13 + 15)        --结果是整数型
print(13.0 + 15)      --结果是浮点数型
print(13 + 15.0)      --结果是浮点数型
print(13.0 + 15.0)    --结果是浮点数型
print(1 * 2)          --结果是整数型
print(1 * 2.0)        --结果是浮点数型

    ③ / 的注意事项:   由于两个整数相处并不一定是整数,因此当两个数进行相除时,interger都会转换为浮点数(即使两个操作数都是整数液转换,并且除法运算的结果也是浮点数

    ④ // 和 math.floor注意事项: 向左取整    // 向左取整时如果两个数组有浮点数则结果是浮点数  math.floor向左取整则不会出现浮点数

 

print(2.5 // 1)             --输出结果: 2.0
print(-2.5 // 1)            --输出结果: -3.0

print(math.floor(2.5))      --输出结果: 2
print(math.floor(-2.5))     --输出结果: -3

    ⑤ 取负数运算(如果两个操作数都是整型值则返回整型;否则返回浮点数)

print(-(-1))        --输出结果: 1 
print(-(1))         --输出结果: -1 
print(-(3 * 6.0))   --输出结果: -18.0

    ⑥ 取余运算(如果两个操作数都是整型值则返回整型;否则返回浮点数)

local a = 11
local b = 2
print( a % b == a - ((a // b) * b) )    --输出结果: true

--取余运算可以对数值保留n位小数(一般不用这种方式)
x = math.pi
print(x - x % 0.1)                --保留1位小数

print(x - x % 0.01)               --保留2位小数

    ⑦ 幂运算: 幂运算的操作数和结果也永远是浮点类型, 使用x^0.5来计算x的平方根,使用x^(1/3)来计算x的立方根

 

三. 关系运算符

  1. Lua支持的关系运算符如下

     ①大于(>)、小于(<)

    ②大于等于(>=)、小于等于(<=)

    ③相等(==)

    ④不相等(~=)

  2. Lua关系运算的结果都是boolean类型

  3. ==、~=说明:这两个运算符可以应用于任意两个值,当这两个值的类型不同时,Lua语言认为它们是不相等的;否则,会根据它们的类型再对两者进行比较

  4. Lua通过引用比较tables、userdata、functions。也就是说两者表示同一个对象时相等

 

print(1 == 2)       --输出结果: false
print(1 == 1)       --输出结果: true
 
-- 类型不同, 直接返回false, 根本不进行比较
print(1 == "1")     --输出结果: false
print("1" == "1")   --输出结果: true
print("1" == "2")   --输出结果: false

--布尔值与nil比较
print(false ~= nil)    -- true

--数组比较
a = { 1, 2 }
b = { 1, 2 }
c = a
print(a == b) --false
print(a == c) --true

 

  5. 比较数值时永远忽略数值的子类型,数值究竟是以整型还是浮点型表示并无区别,只与算术值有关(尽管如此,比较具有相同子类型的数值时效率更高)

print(1.0 == 1)     --输出结果: true
print(1 == 1)       --输出结果: true
print(1.1 == 1)     --输出结果: false

  6. > < >= <=

 

--字符串比较(必须两边都是字符串否则会报错)
print("a">"b")  --false
--"12"和"2"比较时,按照字母顺序比较的时候,首先是字符"1"和字符"2"进行比较,1大于2为false,则忽略后面的比较操作,直接返回false
print("12" > "2") --false

--比较大小的错误示范 print(true > 1) --报错,类型不同 print("1" > 1) --报错,类型不同

 

标签:输出,结果,--,浮点数,L04,number,print,类型,math
来源: https://www.cnblogs.com/xgkj/p/16676720.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有