你一直在關注數值,所以或早或晚,必定會對值進行一些數學運算。如果回想在學校的時間,關于三角函數和微積分等,可能會記得使用科學計算器計算來解決困難的數學問題,比如涉及正弦余弦等可怕的數學函數。在Haxe里,所有這些數學函數都被存儲在 Math 類中。
幸運的是,本書不是一本數學教科書,所以本章會排除一些數學理論,但是向你展示一些常見的Math類的方法,所以至少了解一些基礎。下表是Math類中的一些方法:
|Math 字段|描述|
| -- | -- |
|NEGATIVE_INFINITY: Float|負無窮大,代表一個負的被0除|
|NaN:Float|代表非數字|
|PI:Float|PI的值|
|POSITIVE_INFINITY: Float|正無窮大,代表一個正數的被0除|
|abs(value:Float):Float|絕對值|
|acos(value:Float):Float|返回一個弧度表示的角的反余弦|
|asin(value:Float):Float|返回一個弧度表示的角的反正弦|
|atan(value:Float):Float|返回一個弧度表示的角的反正切|
|atan2(value1:Float, value2:Float):Float|Returns the angle of the point x / y in radians|
|ceil(value:Float):Int|向下取整|
|cos(value : Float) : Float |返回一個弧度表示的角的余弦|
|exp(value : Float) : Float |Returns the base of the natural logarithm to the power of the supplied float |
|floor(value:Float):Int|向上取整|
|isFinite(value:Float):Bool|如果等于正負無窮大則返回true,否則返回 false|
|isNaN(value:Float):Bool|如果不是一個數字返回true,否則false|
|log(value:Float):Float|尋找一個數值的對數|
|max(value1 : Float, value2 : Float) : Float|返回兩者之中的最大的值|
|min(value1:Float,value2:Float):Float|返回兩者之中的最小值|
|pow(value:Float,value2:Float):Float|返回value1的value2次方|
|random():Float|返回0到1之間的一個隨機數|
|round(value:Float):Int|四舍五入取整|
|sin(value:Float):Float|返回一個弧度表示的角的正弦|
|sqrt(value:Float):Float|返回平方根|
|tan(value:Float):Float|返回一個弧度表示的角的正切|
# 除以0的難題
* * * * *
當在Haxe中使用數值,可能會觸及一些障礙,即使最有經驗的開發者難以避免。大概多數這些騷擾來自于除以0的問題。問題是,無論什么樣的計算機處理數據,任何數除以0都會產生一個非常大的數據,即使Haxe里的Float類型可以處理再大的數字,也沒有辦法包含一個無限的值。為了解決這個問題,Haxe的Math類提供兩個常數,允許你測試這個錯誤:NEGATIVE_INFINITY 和 POSITIVE_INFINITY。 這兩個常數值都是Float類型,但是不表示實際的值。只是讓你比較自己的Float值來知道是否他們是有效的數字:
~~~
var myFlt : Float = 2 / 0;
var isValid : Bool = (myFlt != Math.POSITIVE_INFINITY);
~~~
也可以使用Math類的方法 isFinite,如果數值不是一個有限的值,則返回true:
~~~
var myFlt : Float = 2 / 0;
var isValid : Bool = Math.isFinite(myFlt);
~~~
# NaN
* * * * *
另外一個測試數字有效性的方法是使用NaN常量。NaN,也就是說 Not A Number ,用來檢查是否一個 Float或者Int是有效的數值類型。如果一個數值類型無效,那么它的值就是NaN。
~~~
var myFlt : Float;
untyped { myFlt = “Not a Number”; }
var isValid : Bool = (myFlt != Math.NaN);
~~~
在Neko,這樣一個表達式是有效的,isValid變量會測試true,在Flash,結果就不是一個有效的數字,結果將是false 。Haxe的Math類也提供一個方法叫做isNaN 。這個方法會在數值無效的時候返回true,可以以下方式使用:
~~~
var myFlt : Float;
untyped { myFlt = “Not a Number”; }
var isValid : Bool = !Math.isNaN(myFlt);
~~~
如你所見,否定操作符用來返回true,如果結果是一個有效的數值類型。
# Float和Int的轉換函數
* * * * *
當轉換一個浮點數為整數,虛擬機只會簡單的無視小數點后的數字。這相當于向下浮動到最接近的整數。Haxe的Math類提供一些其他的控制方法來轉換Float到Int。包括 floor,ceil和round:
floor 方法執行和投射一個Float到Int相同的功能,向下取整。ceil方法,執行向上取整。而round方法,會根據四舍五入的原則取整。
- 本書目錄
- 第一章:Haxe介紹
- 互聯網開發的一個問題
- Haxe是什么,為什么產生
- Haxe編譯工具
- Haxe語言
- Haxe如何工作
- 那么Neko是什么
- Haxe和Neko的必須條件
- 本章摘要
- 第二章:安裝、使用Haxe和Neko
- 安裝Haxe
- 使用Haxe安裝程序
- 在Windows上手動安裝Haxe
- Linux上手動安裝Haxe
- 安裝Neko
- Windows上手動安裝Neko
- 在Linux上安裝Neko
- Hello world! 一式三份
- 編譯你的第一個Haxe應用
- 你的程序如何編譯
- HXML編譯文件
- 編譯到Neko
- 編譯為JavaScript
- 程序結構
- 編譯工具開關
- 本章摘要
- 第三章:基礎知識學習
- Haxe層級結構
- 標準數據類型
- 變量
- 類型推斷
- 常數變量
- 簡單的值類型
- 浮點類型
- 整型
- 選擇數值類型
- 布爾類型
- 字符串類型
- 抽象類型
- Void 和 Null
- 動態類型
- unknown類型
- 使用untyped繞過靜態類型
- 注釋代碼
- 轉換數據類型
- Haxe數組
- Array
- List
- Map
- Haxe中使用日期時間
- 創建一個時間對象
- Date組件
- DateTools類
- 操作數據
- 操作符
- Math類
- 使用String函數
- 本章摘要
- 第四章:信息流控制
- 數據存放之外
- 條件語句
- if語句
- switch語句
- 從條件語句返回值
- 循環
- while循環
- for循環
- 循環集合
- Break和Continue
- 函數
- 類的函數
- 局部函數
- Lambda類
- 本章摘要
- 第五章:深入面向對象編程
- 類和對象
- 實例字段
- 靜態字段
- 理解繼承
- Super
- 函數重載
- 構造器重載
- toString()
- 抽象類和抽象方法
- 靜態字段,實例變量和繼承
- 繼承規則
- 使用接口
- 高級類和對象特性
- 類的實現
- 類型參數
- 匿名對象
- 實現動態
- Typedef
- 擴展
- 枚舉
- 構造器參數
- 本章摘要
- 第六章:組織你的代碼
- 編寫可重用代碼
- 使用包
- 聲明一個包
- 隱式導入
- 顯式導入
- 枚舉和包
- 類型查找順序
- 導入一個完整的包
- 導入庫
- Haxe標準庫
- Haxelib庫
- 其他項目中的庫
- 外部庫
- 使用資源
- 文檔化代碼
- 離線文檔
- 在線文檔
- 單元測試
- haxe.unit包
- 編寫測試
- 本章摘要
- 第七章:錯誤調試
- trace函數
- trace輸出
- haxe的trace和ActionScript的trace
- 異常
- 異常處理
- CallStack和ExceptionStack
- 異常管理類
- 創建完全的異常處理類
- 異常類代碼
- 本章摘要
- 第八章:跨平臺工具
- XML
- XML剖析
- Haxe XML API
- 正則表達式
- EReg類
- 模式
- 定時器
- 延遲動作
- 隊列動作
- MD5
- 本章摘要
- 第九章:使用Haxe構建網站
- Web開發介紹
- Web 服務器
- 使用Web服務器發布內容
- HTML速成課程
- Haxe和HTML的區別
- NekoTools Web Server
- Apache安裝mod_neko
- Windows安裝Apache和mod_neko
- Linux安裝Apache和Mod_Neko
- 第一個Haxe網站
- 使用Neko作為網頁Controller
- neko.Web類
- Neko作為前端控制器
- 本章摘要
- 第十章:使用模板進行分離式設計
- 什么是模板
- Template類
- Template語法
- 使用資產
- 何時在模板中使用代碼
- 服務器端模板的Templo
- 安裝Templo
- 使用Templo
- haxe.Template和mtwin.Templo表達式上的區別
- Attr表達式
- Raw表達式
- 邏輯表達式
- 循環表達式
- set, fill, 和 use表達式
- Templo中使用宏
- 手動編譯模版
- 第十一章:執行服務端技巧
- 第十二章:使用Flash構建交互內容
- 第十三章:使用IDE
- 第十四章:通過JavaScript制作更多交互內容
- 第十五章:通過Haxe遠程通信連接所學
- 第十六章:Haxe高級話題
- 第十七章:Neko開發桌面應用
- 第十八章:用SWHX開發桌面Flash
- 第十九章:多媒體和Neko
- 第二十章:使用C/C++擴展Haxe
- 附加部分