我有一个整数值,例如-12345678
,我想删除
前导数字,结果为-2345678
。
可以将其转换为字符串并删除1个字符,然后删除1个符号。
有没有简单的方法来实现这一目标?
答案 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
是给定数字的前导数字
并且e
是10
的相应权力,例如对于n = 432
我们来说
得到m = 4
和e = 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))))))