获取 CGFloat 类型的第一个数字
Get first number of type CGFloat
我在 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 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)
等等。
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
试试这个……我希望它能奏效
你说:
For example if the screen width is 375.0 then display 3 columns, If somewhere around 600 then display 6 columns, if around 1000 then display 10 columns and so on with equal width.
所以你真正想要的不是宽度的第一位数字(这会
例如 1
表示 width = 1024
而不是所需的 10
)
但宽度除以 100 并向下舍入到下一个整数值:
let numColumns = (width / 100.0).rounded(.down)
或者,作为整数值:
let numColumns = Int(width / 100.0)
我在 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 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)
等等。
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
试试这个……我希望它能奏效
你说:
For example if the screen width is 375.0 then display 3 columns, If somewhere around 600 then display 6 columns, if around 1000 then display 10 columns and so on with equal width.
所以你真正想要的不是宽度的第一位数字(这会
例如 1
表示 width = 1024
而不是所需的 10
)
但宽度除以 100 并向下舍入到下一个整数值:
let numColumns = (width / 100.0).rounded(.down)
或者,作为整数值:
let numColumns = Int(width / 100.0)