《從零開始學Swift》學習筆記(Day 15)——請注意數字型別之間的轉換

智捷關東昇發表於2016-03-14

原創文章,歡迎轉載。轉載請註明:關東昇的部落格

  在C、Objective-C和Java等其他語言中,整型之間有兩種轉換方法:

  • 從小範圍數到大範圍數轉換是自動的;
  • 從大範圍數到小範圍數需要強制型別轉換,有可能造成資料精度的丟失。

而在Swift中這兩種方法是行不通的,需要通過一些函式進行顯式地轉換,程式碼如下:

let historyScore:UInt8 = 90

let englishScore:UInt16 = 130

let totalScore = historyScore + englishScore //錯誤

  程式就會有編譯錯誤,原因是historyScore是UInt8型別,而englishScore是UInt16型別,它們之間不能轉換。

兩種轉換方法:

  • 一種是把UInt8的historyScore轉換為UInt16型別。由於是從小範圍數轉換為大範圍數,這種轉換是安全的。 程式碼:

    let totalScore = UInt16(historyScore) + englishScore //是正確的轉換方法。 

  • 另外一種是把UInt16的englishScore轉換為UInt8型別。由於是從大範圍數轉換為小範圍數,這種轉換是不安全的,如果轉換的數比較大可能會造成精度的丟失。 程式碼:

    let totalScore = historyScore + UInt8(englishScore) //是正確的轉換方法。

本例中englishScore的值是130,這個轉換是成功的,如果把這個數修改為1300,雖然程式編譯沒有問題,但是會在控制檯中輸出異常資訊。

整型與浮點型之間的轉換

  整型與浮點型之間的轉換與整型之間的轉換類似:

let historyScore:Float = 90.6   

let englishScore:UInt16 = 130 

let totalScore = historyScore + englishScore  //錯誤  

let totalScore = historyScore + Float(englishScore)  //正確,安全

let totalScore = UInt16(historyScore) + englishScore  //正確,小數被截掉    

歡迎關注關東昇新浪微博@tony_關東昇。 關注智捷課堂微信公共平臺,瞭解最新技術文章、圖書、教程資訊

enter image description here

更多精品iOS、Cocos、移動設計課程請關注智捷課堂官方網站:http://www.zhijieketang.com 智捷課堂論壇網站:http://51work6.com/forum.php

相關文章