【问题标题】:Get first number of type CGFloat获取 CGFloat 类型的第一个数字
【发布时间】:2018-07-09 09:18:03
【问题描述】:

我在 CGFloat 中有以下数字

  1. 375.0
  2. 637.0
  3. 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(width: screenWidth / totalColumn) 等等。

【问题讨论】:

  • 是“1”。您输入的一部分?
  • @Koen 宽度常数是输入。
  • 我很好奇:为什么你需要那个,实际目的是什么? – 结果应该是什么?为-0.000123 ?
  • 输入是否总是相同的格式,所以三个数字,一个小数点,然后另一个数字?在这种情况下,除以 100,然后使用 floor

标签: swift string swift4 cgfloat


【解决方案1】:
 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

试试这个...我希望它会工作

【讨论】:

  • 该代码无法正确处理负数。
  • @DuncanC 我已经更新了答案,现在它也适用于负数
  • 如果输入是-764.34,结果应该是7还是-7?
  • @PradeepKashyap 这似乎可以解决问题,我实际上不必处理负数,但因为您已经给出了解决方案。谢谢。
  • 为什么不使用abs()来获取绝对值呢? (对于浮点和整数类型都有一个abs() 版本。)
【解决方案2】:

你说:

例如,如果屏幕宽度为 375.0 则显示 3 列,如果某处大约 600 则显示 6 列,如果大约 1000 则显示 10 列等宽度。

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

let numColumns = (width / 100.0).rounded(.down)

或者,作为一个整数值:

let numColumns = Int(width / 100.0)

【讨论】:

    猜你喜欢
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多