Lua math(三) tool

工具.jpg

前言#

今天這個系列的函數我將其命名為工具,之所以這么命名是因為這個系列函數沒有復雜的公式,僅僅是取數字的一部分,或者是把數字變個形式等等,但有這些函數是很重要的,其中有很多函數是我們經常用到的,比如求絕對值、向下取整、求余運算等等。

內容#


math.huge##

  • 原型:math.huge
  • 解釋:返回HUGE_VAL的值,是一個大于任何數字的值。

math.abs()##

  • 原型:math.abs(x)
  • 解釋:返回一個數x的絕對值。

math.ceil()##

  • 原型:math.ceil(x)
  • 解釋:返回一個大于等于x的最小的一個數,即向上取整。

math.floor()##

  • 原型:math.floor(x)
  • 解釋:返回一個小于等于x的最大的一個數,即向下取整。

math.fmod()##

  • 原型:math.fmod(x, y)
  • 解釋:返回x%y的值,即想除以y的余數。

math.modf()##

  • 原型:math.modf(x)
  • 解釋:返回數x的整數部分和小數部分。

math.max()##

  • 原型:math.max(x, ...)
  • 解釋:返回所有參數中最大的一個值。

math.min()##

  • 原型:math.min(x, ...)
  • 解釋:返回所有參數中最小的一個值。

math.randomseed()##

  • 原型:math.randomseed(x)
  • 解釋:將x 設置為偽隨機數生成器的種子,相同的隨機數生成器生成相同的數列。

math.random()##

  • 原型:math.random([m [, n]])
  • 解釋:這個函數就是提供了一個使用ANSI C函數rand的一個接口,可以生成一個偽隨機數。
  • 當不傳任何參數時函數返回一個[0,1)范圍內的真實數字。
  • 當只傳入數字m時,函數返回一個范圍[1,m]內的偽隨機整數。
  • 當傳入兩個數字mn時,函數返回范圍[m,n]內的一個偽隨機整數。

Uasge##

  • 首先新建一個文件然后命名為toolfunctest.lua編寫如下代碼:
-- 數字最大值
print("\nmath.huge = "..math.huge)
if 99999999 < math.huge then
    print("math.huge test")
end

-- 絕對值
local x = 3
print("\nmath.abs("..x..") = "..math.abs(x))
x = -3
print("math.abs("..x..") = "..math.abs(x))

-- 向上取整
x = 3.1
print("\nmath.ceil("..x..") = "..math.ceil(x))

-- 向下取整
x = 3.9
print("\nmath.floor("..x..") = "..math.floor(x))

-- 求余數
x = 3
local y = 5
print("\nmath.fmod("..x..", "..y..") = "..math.fmod(x, y))
y = -5
print("math.fmod("..x..", "..y..") = "..math.fmod(x, y))
x = -3
y = 5
print("math.fmod("..x..", "..y..") = "..math.fmod(x, y))

-- 取整數和小數
x = 6.7
local zs, xs = math.modf(x)
print("\nmath.modf("..x..") = "..zs..", "..xs)

-- 最大值
x = 3; y = 10; z = 99
print("\nmath.max("..x..", "..y..", "..z..") = "..math.max(x, y, z))

-- 最小值
x = 3; y =-3; z= 32
print("\nmath.min("..x..", "..y..", "..z..") = "..math.min(x, y, z))

-- 隨機數
local m = 8;
local n = 100;
print("\nmath.random() = "..math.random())
print("\nmath.random("..m..") = "..math.random(m))
print("\nmath.random("..m..", "..n..") = "..math.random(m, n))

m = 9999;
math.randomseed(100)
print("\nmath.randomseed(100)")
print("math.random("..m..") = "..math.random(m))
print("math.random("..m..") = "..math.random(m))
print("math.random("..m..") = "..math.random(m))

math.randomseed(100)
print("\nmath.randomseed(100)")
print("math.random("..m..") = "..math.random(m))
print("math.random("..m..") = "..math.random(m))
print("math.random("..m..") = "..math.random(m))

math.randomseed(1000)
print("\nmath.randomseed(1000)")
print("math.random("..m..") = "..math.random(m))
print("math.random("..m..") = "..math.random(m))
print("math.random("..m..") = "..math.random(m))
  • 運行結果
math_tool.png

總結#

  • 注意math.huge的使用,這是一個值而不是一個函數,所以使用的時候千萬不要加括號。
  • 我們可以重點分析一下產生隨機數的這個函數,從函數的定義中就可以看出,這個“隨機數”并不是真正的隨機,而是一個和時間種子相關的偽隨機序列。
  • 當我們的隨機種子相同時就可以產生相同的,這一點從運行結果中也可以看到,而當改變這個隨機種子時,對應的序列也會改變,所以我們在日常的應用中常使用時間戳(從1970年1月1日至今的秒數)作為隨機種子來盡可能的保證函數產生的序列不相同。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 首頁 資訊 文章 資源 小組 相親 登錄 注冊 首頁 最新文章 IT 職場 前端 后端 移動端 數據庫 運維 其他...
    Helen_Cat閱讀 3,919評論 1 10
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,754評論 18 399
  • 第5章 引用類型(返回首頁) 本章內容 使用對象 創建并操作數組 理解基本的JavaScript類型 使用基本類型...
    大學一百閱讀 3,268評論 0 4
  • FreeCodeCamp - Basic JavaScript 寫在前面: 我曾經在進谷前刷過這一套題,不過當時只...
    付林恒閱讀 16,493評論 5 28
  • 之前有顧慮,但那件事情之后,貌似顧慮沒了。但是現在顧慮更多,我該怎么辦…
    言必然后的背后閱讀 179評論 0 1