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
#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()