从整数中删除前导数字

时间:2017-09-22 07:27:04

标签: swift integer

我有一个整数值,例如-12345678,我想删除 前导数字,结果为-2345678

可以将其转换为字符串并删除1个字符,然后删除1个符号。

有没有简单的方法来实现这一目标?

4 个答案:

答案 0 :(得分:3)

一种可能的解决方案,使用简单的整数运算:

func removeLeadingDigit(_ n: Int) -> Int {
    var m = n.magnitude
    var e = 1
    while m >= 10 {
        m /= 10
        e *= 10
    }
    return n - n.signum() * Int(m) * e
}

在循环结束时,m是给定数字的前导数字 并且e10的相应权力,例如对于n = 432我们来说 得到m = 4e = 100。一些测试:

print(removeLeadingDigit(0))    // 0
print(removeLeadingDigit(1))    // 0
print(removeLeadingDigit(9))    // 0
print(removeLeadingDigit(10))   // 0
print(removeLeadingDigit(18))   // 8
print(removeLeadingDigit(12345))    // 2345

print(removeLeadingDigit(-12345))   // -2345
print(removeLeadingDigit(-1))       // 0
print(removeLeadingDigit(-12))      // -2

print(Int.max, removeLeadingDigit(Int.max)) // 9223372036854775807 223372036854775807
print(Int.min, removeLeadingDigit(Int.min)) // -9223372036854775808 -223372036854775808

答案 1 :(得分:1)

这样的事情:

let value = -12345678
var text = "\(value)"

if text.hasPrefix("-") {
    let index = text.index(text.startIndex, offsetBy: 1)
    text.remove(at: index)
} else if text.characters.count > 1 {
    let index = text.index(text.startIndex, offsetBy: 0)
    text.remove(at: index)
}

输出:

value = -12345678 will print out -2345678
value = 12345678 will print out 2345678
value = 0 will print out 0

答案 2 :(得分:1)

这样的东西
let intValue = 12345678
let value = intValue % Int(NSDecimalNumber(decimal: pow(10, intValue.description.characters.count - 1)))
//value = 2345678

答案 3 :(得分:1)

let n = -123456
let m = n % Int(pow(10, floor(log10(Double(abs(n))))))

来源:https://stackoverflow.com/a/4319868/5536516