zoukankan      html  css  js  c++  java
  • Swift数字类型之间的转换

    Swift数字类型之间的转换Swift是一种安全的语言,对于类型的检查非常严格,不同类型之间不能随便转换。
    一、整型之间的转换
    在C和Objective-C等其他语言中,整型之间有两种转换方法:
    从小范围数到大范围数转换是自动的;
    从大范围数到小范围数需要强制类型转换,有可能造成数据精度的丢失。
    而在Swift中这两种方法是行不通的,我们需要通过一些函数进行显式地转换,代码如下:

    [html] view plaincopy
     
    1. let historyScore:UInt8 = 90  
    2.   
    3.   
    4. let englishScore:UInt16 = 130  
    5.   
    6.   
    7. let totalScore = historyScore + englishScore  //错误  ①  
    8.   
    9.   
    10. let totalScore = UInt16(historyScore) + englishScore   //正确 ②  
    11.   
    12.   
    13. let totalScore = historyScore + UInt8(englishScore)  //正确   ③  



    上述代码声明和初始化了两个常量historyScore和englishScore,我们把它们相加赋值给totalScore。如果采用第①行代码实现相加,程序就会有编译错误,原因是historyScore是UInt8类型,而englishScore是UInt16类型,它们之间不能转换。
    我们有两种转换方法。
    一种是把UInt8的historyScore转换为UInt16类型。由于是从小范围数转换为大范围数,这种转换是安全的。代码第②行UInt16(historyScore)就是正确的转换方法。
    另外一种是把UInt16的englishScore转换为UInt8类型。由于是从大范围数转换为小范围数,这种转换是不安全的,如果转换的数比较大会造成精度的丢失。代码第③行UInt8(englishScore)是正确的转换方法。由于本例中englishScore的值是130,这个转换是成功的,如果把这个数修改为1300,虽然程序编译没有问题,但是会在控制台中输出异常信息,这是运行期异常。
    上述代码中,UInt16(historyScore)和UInt8(englishScore)事实上是构造器,能够创建并初始化另外一个类型。关于构造器的内容,我们会在第14章详细介绍。
    二、整型与浮点型之间的转换
    整型与浮点型之间的转换与整型之间的转换类似,因此我们将上一节的示例修改如下:

    [html] view plaincopy
     
    1. let historyScore:Float = 90.6           ①  
    2.   
    3.   
    4. let englishScore:UInt16 = 130           ②  
    5.   
    6.   
    7. let totalScore = historyScore + englishScore  //错误          ③  
    8.   
    9.   
    10. let totalScore = historyScore + Float(englishScore)  //正确,安全    ④  
    11.   
    12.   
    13. let totalScore = UInt16(historyScore) + englishScore  //正确,小数被截掉    ⑤  



    上述代码经过了一些修改,第①行代码historyScore变量类型是Float类型。第②行代码englishScore变量还是UInt16类型。其中第③行代码直接进行了计算,结果有编译错误。第④行代码是将UInt16类型的englishScore变量转换为Float类型,这种转换是最安全的。第⑤行代码是将Float类型的historyScore变量转换为UInt16类型,这种转换首先会导致小数被截掉,另外如果historyScore变量数很大,会导致运行期异常,这与整型之间的转换是类似的。

    更多内容请关注国内第一本Swift图书《Swift开发指南》
    本书交流讨论网站:http://www.51work6.com/swift.php
    欢迎加入Swift技术讨论群:362298485

    欢迎关注智捷iOS课堂微信公共平台

  • 相关阅读:
    csr_matrix参数解析
    SQL删除重复数据(根据多个字段),pandas的nan存入数据库报错
    XGBoost参数中文翻译以及参数调优
    pandas.DataFrame.quantile
    pandas.DataFrame.rank
    JOIN子句
    ORDER BY子句
    WHERE子句
    SELECT语句
    数据分析-基础
  • 原文地址:https://www.cnblogs.com/iOS-Blog/p/3957376.html
Copyright © 2011-2022 走看看