Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 获取CGFloat类型的第一个数字_Swift_String_Swift4_Cgfloat - Fatal编程技术网

Swift 获取CGFloat类型的第一个数字

Swift 获取CGFloat类型的第一个数字,swift,string,swift4,cgfloat,Swift,String,Swift4,Cgfloat,我有下面的数字 375.0 637.0 995.0 我需要得到CGFloat数据类型中的第一个数字。例如,#1的结果必须是3.0,#2的结果必须是6.0,#3的结果必须是9.0 我尝试了以下方法 let width:CGFloat = 375.0 // Convert Float To String let widthInStringFormat = String(describing: width) // Get First Character Of The String let firstC

我有下面的数字

  • 375.0
  • 637.0
  • 995.0
  • 我需要得到CGFloat数据类型中的第一个数字。例如,
    #1
    的结果必须是
    3.0
    #2
    的结果必须是
    6.0
    #3
    的结果必须是
    9.0

    我尝试了以下方法

    let width:CGFloat = 375.0
    // Convert Float To String
    let widthInStringFormat = String(describing: width)
    // Get First Character Of The String
    let firstCharacter = widthInStringFormat.first
    // Convert Character To String
    let firstCharacterInStringFormat = String(describing: firstCharacter)
    // Convert String To CGFloat
    //let firstCharacterInFloat = (firstCharacter as NSString).floatValue
    //let firstCharacterInFloat = CGFloat(firstCharacter)
    //let firstCharacterInFloat = NumberFormatter().number(from: firstCharacter)
    
    这里似乎什么都不管用。我哪里做错了

    更新

    要回答@Martin R,请查看以下我的解释

    我正在使用UICollectionView实现一个网格视图(如照片应用程序)。我希望根据iPhone/iPad的屏幕大小、纵向和横向调整单元格大小。基本上我不想要固定列。我需要更大的屏幕尺寸和更小的屏幕尺寸较小的列更多的列。我想也许我可以根据屏幕宽度来决定。例如,如果屏幕宽度为375.0,则显示3列,如果大约600,则显示6列,如果大约1000,则显示10列,以此类推,宽度相等。所以我想到的是a)根据屏幕大小的第一个数字决定列,然后用实际屏幕宽度除以宽度。例如,对于375.0的屏幕宽度,我的单元格大小将为
    CGSize(宽度:screenWidth/totalColumn)
    ,依此类推。

    var floatNum:CGFloat=764.34
    
     var floatNum:CGFloat = 764.34
        var numberNeg = false
        if floatNum < 0{
            floatNum = -1.0 * floatNum
            numberNeg = true
        }
        var intNum = Int(floatNum)
        print(intNum) //764
        while (intNum>9) {
            intNum = Int(intNum/10)
        }
        floatNum = CGFloat(intNum)
        if numberNeg {
            floatNum = -1.0 * floatNum
        }
        print(intNum)//7
        print(floatNum)//7.0
    
    var numberNeg=false 如果floatNum<0{ floatNum=-1.0*floatNum 数字=真 } var intNum=Int(floatNum) 打印(intNum)//764 while(intNum>9){ intNum=Int(intNum/10) } floatNum=CGFloat(intNum) 如果编号{ floatNum=-1.0*floatNum } 打印(intNum)//7 打印(floatNum)//7.0
    试试这个……我希望它能起作用 var numberNeg=false 如果floatNum<0{ floatNum=-1.0*floatNum 数字=真 } var intNum=Int(floatNum) 打印(intNum)//764 while(intNum>9){ intNum=Int(intNum/10) } floatNum=CGFloat(intNum) 如果编号{ floatNum=-1.0*floatNum } 打印(intNum)//7 打印(floatNum)//7.0 试试这个……我希望它能起作用

    你说:

    例如,如果屏幕宽度为375.0,则显示3列,如果大约600,则显示6列,如果大约1000,则显示10列,以此类推,宽度相等

    因此,您真正想要的不是宽度的第一个数字(这将 例如,
    width=1024的
    1
    ,而不是所需的
    10
    ) 但宽度除以100并向下舍入到下一个整数值:

    let numColumns = (width / 100.0).rounded(.down)
    
    或者,作为整数值:

    let numColumns = Int(width / 100.0)
    
    你说:

    例如,如果屏幕宽度为375.0,则显示3列,如果大约600,则显示6列,如果大约1000,则显示10列,以此类推,宽度相等

    因此,您真正想要的不是宽度的第一个数字(这将 例如,
    width=1024的
    1
    ,而不是所需的
    10
    ) 但宽度除以100并向下舍入到下一个整数值:

    let numColumns = (width / 100.0).rounded(.down)
    
    或者,作为整数值:

    let numColumns = Int(width / 100.0)
    

    可能重复?“1.”是您输入的一部分吗?@Koen width常量是输入。我很好奇:您为什么需要它,实际用途是什么例如,对于
    -0.000123
    ,结果应该是什么?输入的格式总是相同的,所以是三个数字,一个小数点,然后是另一个数字?在这种情况下,除以100,然后使用
    floor
    。是否可能重复?“1.”是您输入的一部分吗?@Koen width常量是输入。我很好奇:您为什么需要它,实际用途是什么例如,对于
    -0.000123
    ,结果应该是什么?输入的格式总是相同的,所以是三个数字,一个小数点,然后是另一个数字?在这种情况下,除以100,然后使用
    floor
    。该代码无法正确处理负数。@Duncac我现在已经更新了答案,它也适用于负数。如果输入值为-764.34,那么结果应该是7还是-7?@PradeepKashyap这似乎可以解决问题,实际上我不需要处理负数,但既然你已经给出了解决方案。谢谢。为什么不使用
    abs()
    来获取绝对值呢?(有一个版本的
    abs()
    用于浮点数和整数类型。)该代码不能正确处理负数。@Duncac我已经更新了答案,它也适用于负数。如果输入是-764.34,结果应该是7还是-7?@PradeepKashyap这似乎可以解决问题,实际上我不需要处理负数,但既然你已经给出了解决方案。谢谢。为什么不使用
    abs()
    来获取绝对值呢?(对于浮点和整数类型,都有一个版本的
    abs()