这是一个超级基本的问题,但是,我似乎无法在Swift中找到答案。
问题:
如何获取Swift 2和Swift 3中数字的整数部分和小数部分(分别位于小数点左侧和右侧)?例如,对于数字1234.56789 -
如何获得整数部分 1234 .56789?
如何获得小数部分1234. 56789 ?
答案 0 :(得分:32)
你可以做简单的地板和截断:
let value = 1234.56789
let integer = floor(value) // 1234
let decimal = value.truncatingRemainder(dividingBy: 1) // 0.56789
答案 1 :(得分:4)
Swift 4.x完整解决方案:
我也赞扬@Thomas解决方案,我想补充一些东西,使我们能够在2字符串部分中使用分开的部分。
尤其是当我们要为数字的UILabel
和main
部分使用2个不同的decimal
时。
以下扩展名也是小数部分的管理数量。我认为这可能有用。
extension Double{
func integerPart()->String{
let result = floor(self).description.dropLast(2).description
return result
}
func fractionalPart(_ withDecimalQty:Int = 2)->String{
let valDecimal = self.truncatingRemainder(dividingBy: 1)
let formatted = String(format: "%.\(withDecimalQty)f", valDecimal)
return formatted.dropFirst(2).description
}
}
答案 2 :(得分:3)
你可以这样做 - >
let x:Double = 1234.5678
let y:Double = Double(Int(x))
let z:Double = x - Double(Int(x))
print("\(x) \(y) \(z)")
其中x是您的原始值。 y是整数部分,z是小数部分。
修改强>
托马斯回答是你想要的......
答案 3 :(得分:1)
将您的号码转换为字符串,以后将单独的字符串从。
试试这个: -
let number:Float = 123.46789
let numberString = String(number)
let numberComponent = numberString.components(separatedBy :".")
let integerNumber = Int(numberComponent [0])
let fractionalNumber = Int(numberComponent [1])
答案 4 :(得分:0)
无需扩展名。 Swift已经为此内置了功能。
let aNumber = modf(3.12345)
aNumber.0 // 3.0
aNumber.1 // 0.12345
答案 5 :(得分:0)
modf()对数字> 10亿
无效@Trevor的行为类似于modf()
@Andres Cedronius示例的行为也类似于modf()(我尝试对其进行修改)
@Irshad Ahmed解决方案很好
有一些方便的转换
由于某些原因,您需要更多控制权,请查看https://developer.apple.com/documentation/foundation/numberformatter
extension Double {
/// 1.00234 -> 1.0
var integerPart: Double {
return Double(Int(self))
}
/// 1.0012 --> 0.0012
var fractionPart: Double {
let fractionStr = "0.\(String(self).split(separator: ".")[1])"
return Double(fractionStr)!
}
/// 1.0012 --> "0.0012"
var fractionPartString: String {
return "0.\(String(self).split(separator: ".")[1])"
}
/// 1.0012 --> 12
var fractionPartInteger: Int {
let fractionStr = "\(String(self).split(separator: ".")[1])"
return Int(fractionStr)!
}
/// 1.0012 --> "0012"
var fractionPartIntegerString: String {
return "\(String(self).split(separator: ".")[1])"
}
}
print(1000.0.integerPart) // 1000.0
print(1000.0.fractionPart) // 0.0
print(1000.1.integerPart) // 1000.0
print(1000.2.fractionPart) // 0.2
print(1_000_000_000.1.integerPart) // 1000000000.0
print(100_000_000.13233.fractionPart) // 0.13233
答案 6 :(得分:0)
这绝对会迅速为您带来5/4/4
let number = 3.145443
let integerValue = String(format: "%.0f", number)
let integerValue1 = String(format: "%.1f", number)
let integerValue2 = String(format: "%.2f", number)
print(integerValue)
print(integerValue1)
print(integerValue2)
//Output
3
3.1
3.2
答案 7 :(得分:0)
var specimen0:Double = 1234.56789
var significant0 = Double.IntegerLiteralType(specimen0) // result is an integer
var fractionals0 = specimen0 - Double(significant0)
var specimen1:Float = -1234.56789
var significant1 = Float.IntegerLiteralType(specimen1) // result is an integer
var fractionals1 = specimen1 - Float(significant1)
var specimen2:CGFloat = -1234.56789
var significant2 = CGFloat.IntegerLiteralType(specimen2) // result is an integer
var fractionals2 = specimen2 - CGFloat(significant2)
这些都是在 Swift 5.3 中内置的,我敢肯定甚至更早......